![]() ![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() ![]() ![]() |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
![]()
PHP 4.0 Manuel de RÈfÈrence Copyright (C) 1997, 1998, 1999, 2000 par le PHP Documentation Group. Traduction franÁaise par Nexen.net 1 Préface
PHP, signifie "PHP: Hypertext
Preprocessor" (Preprocesseur HyperTexte) , est un langage de script HTML
La plupart de sa syntaxe est empruntée aux langages C, Java et Perl, mais
y ajoute plusieurs fonctionnalités uniques. Le but de ce langage est de
permettre aux développeurs web de concevoir rapidement des sites, aux pages
dynamiques
1.1 A propos de ce manuel
Ce manuel est écrit en SGML en utilisant DocBook DTD, avec DSSSL (Document
Style and Semantics Specification Language) pour le formattage. Les utilitaires
utilisés pour générer le format HTML,
TeX et RTF sont
Jade, écrit James Clark et The Modular DocBook Stylesheets
écrit par Norman Walsh.
La documentation PHP a été assemblée par stig@php.net.
2 Preface
2.1 Les auteurs
Stig SÊther Bakken Alexander Aulbach Egon Schmid Jim Winstead Lars Torben Wilson Rasmus Lerdorf Zeev Suraski Andrei Zmievski Stig SÊther Bakken Egon Schmid 1997 1998 1999 2000 the PHP Documentation Group 2.2 Copyright
La traduction de ce manuel est © Copyright 1999, 2000 par Nexen Services.
3 Copyright, distribution, historique
PHP 3.0 est copyright (C) 1997 par PHP Development Team. Les membres
de cette équipe sont listés dans le fichier de crédits, fourni avec la
distribution source de PHP 3.0. 4 Installation
4.1 Télécharger la dernière version
Le code source ainsi que des binaires pour certaines plates-formes
(notamment Windows), sont disponibles à l'adresse suivante:
http://www.php.net/
.
4.2 Installation sous UNIX
Ce chapitre va vous aider lors de la configuration et de l'installation du PHP. Les connaissances requises sont les suivantes :
4.2.1 Installation rapide (Version Module Apache)
PHP peut être compilé de nombreuses manières différentes pour en
faire un module Apache. Voyons d'abord les instructions rapides,
puis une liste d'exemples divers, avec les explications. Comme cela
nous aurons survolé l'ensemble de l'installation.
1. gunzip apache_1.3.x.tar.gz 2. tar xvf apache_1.3.x.tar 3. gunzip php-3.0.x.tar.gz 4. tar xvf php-3.0.x.tar 5. cd apache_1.3.x 6. ./configure --prefix=/www 7. cd ../php-3.0.x 8. ./configure --with-mysql --with-apache=../apache_1.3.x --enable-track-vars 9. make 10. make install 11. cd ../apache_1.3.x 12. ./configure --prefix=/www --activate-module=src/modules/php3/libphp3.a 13. make 14. make install A la place de cette étape, vous pouvez simplement écraser le binaire httpd. Assurez-vous d'avoir bien arrêté le démon d'abord. 15. cd ../php-3.0.x 16. cp php3.ini-dist /usr/local/lib/php3.ini Vous pouvez éditer le fichier de configuration /usr/local/lib/php3.ini. Si vous préférez installer le fichier dans un autre répertoire, il faut utiliser l'option de configuration --with-config-file-path=/path à l'étape 8. 17. Editez le fichier de configuration apache httpd.conf ou srm.conf et ajoutez : AddType application/x-httpd-php3 .php3 Ici, il faut choisir l'extension que vous souhaitez donner au fichier php. .php est simplement celle que nous suggérons. 18. Utilisez la procédure normale afin de démarrer le serveur Apache. (Vous devez impérativement arrêter et redémarrer le serveur Apache, et pas seulement le relancer à l'aide d'un signal HUP ou USR1). ./configure --with-apxs --with-pgsql
./configure --with-apxs --with-pgsql=shared
./configure --with-apache=/path/to/apache_source --with-pgsql
./configure --with-apache=/path/to/apache_source --with-pgsql=shared
4.2.2 Module fhttpd
Pour compiler PHP comme un module fhttpd, répondre "yes" à la question
"Build as an fhttpd module ?" (cela correspond à l'option de configuration
4.2.2 Module fhttpd=DIR
et spécifier la racine de la distribution fhttpd.
Le répertoire par défaut est:
`/usr/local/src/fhttpd'.
Si vous utilisez fhttpd, compiler PHP en module vous permettra d'obtenir des
performances supérieures, plus de contrôle et la possibilité d'exécution à
distance.
4.2.3 Other web servers
PHP peut être compiler pour fonctionner avec de nombreux autres
serveurs web. Reportez vous à
4.3.7 Server pour une liste complète des options de configuration.
4.2.4 `/usr/local/src/fhttpd'
Par défaut, PHP est compilé comme une CGI. Si vous voulez que votre serveur web
supporte le PHP, compiler le PHP comme une CGI permet d'obtenir de meilleures
performances. Cependant, la version CGI permet aux utilisateurs de lancer des
scripts PHP sous leur UID respectives. Lisez attentivement le chapitre consacré
à la 6 Sécurité si vous souhaitez utiliser
cette solution.
4.2.5 Compilation
Lorsque PHP est configuré, vous êtes prêts à compiler un exécutable
CGI, ou une librairie HP. La commande 4.2.6 Tests
Si vous avez compilé PHP comme programme CGI, vous pouvez tester
votre produit en tapant : 4.2.7 Performances
Si vous avez compilé PHP comme programme CGI, vous pouvez évaluer
les performances de PHP avec la commande 4.3 Liste complète des options de configuration
Note :
Ces options ne sont utilisées que lors de la compilation. Si vous voulez
modifier le comportement de PHP au moment de l'exécution, reportez vous à
la partie 7 Configuration.
4.3.1 Configuration pour le support des bases de données
PHP supporte de nombreuses bases de données (et aussi ODBC):
4.3.1.1 install.configure.with-adabas
--with-adabas[=DIR] 4.3.2 Ecommerce
4.3.2.1 install.configure.with-ccvs
--with-ccvs[=DIR] 4.3.3 Graphics
4.3.3.1 install.configure.enable-freetype-4bit-antialias-hack
--enable-freetype-4bit-antialias-hack 4.3.4 Miscellaneous
Cette section est en cours de tri.
4.3.4.1 install.configure.disable-bcmath
--disable-bcmath 4.3.5 Networking
4.3.5.1 install.configure.with-curl
--with-curl[=DIR] 4.3.6 PHP Behaviour
4.3.6.1 install.configure.enable-magic-quotes
--enable-magic-quotes 4.3.7 Server
4.3.7.1 install.configure.with-aolserver-src
--with-aolserver-src=DIR 4.3.8 Text and language
4.3.8.1 install.configure.with-aspell
--with-aspell[=DIR] 4.3.9 XML
4.3.9.1 install.configure.with-dom
--with-dom[=DIR] 4.4 Installation sous Windows 95/98/NT
Ce guide d'installation vous aidera à installer et configurer
PHP sur vos serveurs Windows 9x/NT. Ce guide a été compilé par
4.4.1 Installation
Les instructions doivent être faîtes pour toutes les installations avant d'attaquer les insctructions spécifiques à chaque serveur.
4.4.2 Windows 95/98/NT et PWS/IIS 3
La méthode recommendée pour configurer ces serveurs est d'utiliser
le fichier INF inclus dans la distribution (php_iis_reg.inf).
Vous pouvez éditer ce fichier, pour vous assurer que les
extenstions et les dossiers d'installation de PHP sont bien
ceux de votre configuration. Ou alors, vous pouvez suivre les
instructions suivantes :
4.4.3 Windows NT and IIS 4
Pour installer PHP sur des serveurs NT avec IIS 4, suivez les insctructions
suivantes :
4.4.4 Windows 9x/NT et Apache 1.3.x
Vous devez éditer srm.conf ou
httpd.conf pour configurer Apache, afin qu'il
fonctionne avec PHP CGI.
4.4.5 Omni HTTPd 2.0b1 pour Windows
La méthode la plus simple pour configurer le serveur est :
4.4.6 Modules PHP
4.5 Problèmes?
4.5.1 Read the FAQ
Certains problèmes sont récurrents : Les plus commun sont listés dans
la FAQ PHP, disponible à http://www.php.net/FAQ.php
4.5.2 Bug reports
Si vous pensez avoir trouvé un bug dans PHP, n'oubliez pas de le
signaler. L'équipe de développement PHP ne le connait peut être pas,
et sans le signaler, vos chances de voir le bug corrigés sont nulles.
Vous pouvez rapporter des bugs grâce au système de suivi, accessible à
http://www.php.net/bugs.php.
4.5.3 Autres problèmes
Si vous êtes complètements bloqués, quelqu'un sur la liste de diffusion
PHP pourra probablement vous aider. Essayez de consulter les archives,
au cas où quelqu'un aurait déjà rencontré votre problème. Les archives sont
toujours accessibles à : http://www.php.net/.
Pour souscrire à la liste de diffusion, envoyez un mail vide à
L'adresse de la mailing liste : php-general@lists.php.net.
5 Introduction
5.1 Qu'est ce que PHP?
PHP (officiellement "PHP: Hypertext Preprocessor") est un langage
de script HTML, qui fonctionne coté serveur.
<html> <head> <title>Exemple</title> </head> <body> <?php echo "Salut, je suis un script PHP!"; ?> </body> </html>
5.2 Que peut faire PHP pour vous?
Le langage PHP possède les même fonctionnalités que les autres langages
permettant d'écrire des scripts CGI, comme collecter des données, générer
dynamiquement des pages web ou bien envoyer et recevoir des cookies.
5.3 La génèse du PHP
Le langage PHP a été conçu durant l'automne 1994 par Rasmus Lerdof.
Les premières versions (qui restèrent privées) étaient utilisées afin de
savoir qui venait consulter son CV en ligne. La première version publique fut
disponible au début de l'année 1995. Elle fut connue sous le nom de
"Personal Sommaire Page Tools". Elle était composée d'un analyseur extrêmement
simple qui ne reconnaissait que quelques macro spéciales et d'un petit nombre
d'utilitaires couramment utilisés dans les pages web. Un guestbook,
un compteur, etc... L'analyseur fut réécrit durant l'été 1995 et fut
appelé PHP/FI Version 2. FI etaient les initiales d'un autre package que
Rasmus avait écrit qui interprétait les formulaires HTML. C'est alors qu'il
combina le "Personnal Sommaire Page tools" avec le "Form Interpreter" et il
y ajouta le support de mSQL: c'est comme cela que naquît PHP/FI. PHP/FI grandit
de manière spectaculaire et de nombreuses personnes commencèrent à contribuer
à son amélioration.
6 Sécurité
PHP est un langage puissant et l'interpréteur, qu'il soit inclus dans le
serveur web ou bien compilé en version CGI, est capable d'accéder aux fichiers,
d'exécuter des commandes et d'ouvrir des connexions réseaux.
Toutes ces propriétés fragilise la sécurité d'un serveur web.
Le langage PHP a été pensé afin d'être un langage beaucoup plus sécurisé pour
écrire des CGI que le Perl ou le langage C. De plus une
sélection rigoureuse des options de compilation et d'exécution vous permettront
d'obtenir un équilibre parfait entre liberté et sécurité.
6.1 CGI binary
6.1.1 Faiblesses connues
Utiliser le PHP comme un CGI exécutable vient la plupart
du temps du fait que l'on ne veut pas l'utiliser comme un module du serveur web,
(comme Apache), ou bien que l'on souhaite l'utiliser en combinaison d'un
CGI complémentaire, afin de créer un environnement de script
sécurisé (en utilisant des techniques de chroot ou setuid). Une telle décision
signifie habituellement que vous installez votre exécutable dans le répertoire
cgi-bin de votre serveur web. CERT CA-96.11
recommande effectivement de placer l'interpréteur à l'intérieur du répertoire
cgi-bin. Même si le binaire PHP peut être utilisé comme interpréteur indépendant,
PHP a été pensé afin de rendre impossible les attaques que ce type
d'installation induit.
6.1.2 Cas 1: Tous les fichiers sont publics
Si votre serveur n'a aucun document dont l'accès est restreint par un mot de passe ou un système
de vérification de l'adresse IP, vous n'avez aucun besoin de ce type de configuration. Si votre
serveur web ne permet pas les redirections, ou si votre serveur web n'a aucun besoin de communiquer
avec le binaire PHP de manière sécurisée, vous pouvez utiliser l'option de compilation
4.3.4.19 install.configure.enable-force-cgi-redirect.
Vous devez quand même vérifier qu'aucun script ne fait appel
au PHP, de manière directe, `http://my.host/cgi-bin/php/dir/script.php3' ou bien de manière
indirecte, par redirection,`http://my.host/dir/script.php3'.
6.1.3 Cas 2: Utilisation de la directive de compilation --enable-force-cgi-redirect
Cette option de compilation prévient quiconque d'appeler directement un script
avec l'url `http://my.host/cgi-bin/php/secretdir/script.php3'.
Dans ce cas là, PHP parsera le fichier uniquement si il y a eu redirection.
Action php3-script /cgi-bin/php AddHandler php3-script .php3
Cette option a uniquement été testée avec Apache et compte sur Apache pour affecter
la variable d'environnement non-standart REDIRECT_STATUS
pour les requêtes redirigées. Dans le cas oú votre serveur web ne supporte pas
le renseignement du PHP, pour savoir si la requête a été redirigée ou non,
vous ne pouvez pas utiliser cette option de compilation. Vous devez alors utiliser
une des autres manières pour utiliser la version binaire CGI du PHP, comme exposé ci-dessous.
6.1.4 Cas 3: Utilisation du "doc_root" ou du "user_dir"
Ajouter un contenu interactif dans votre serveur web, comme des scripts ou des exécutables, est souvent considéré comme une pratique non-sécurisée. Si, par erreur, le script n'est pas exécuté mais affiché comme une page HTML classique, il peut en résulter un vol de propriété intellectuelle ou des problèmes de sécurité à propos des mots de passe notamment. Donc, la plupart des administrateurs préfèrent mettre en place un répertoire spécial pour les scripts qui est uniquement accessible par le biais du binaire CGI du PHP, et donc, tous les fichiers de ce répertoire seront interprétés et non affichés tels quel.
6.1.5 Cas 4: L'exécutable PHP à l'extérieur de l'arborescence du serveur
Une solution extrêmement sécurisée consiste à mettre l'exécutable PHP à l'extérieur de l'arborescence du serveur web. Dans le répertoire `/usr/local/bin', par exemple. Le problème de cette méthode est que vous aurez à rajouter la ligne suivante : #!/usr/local/bin/php
dans tous les fichiers contenant des tags PHP. Vous devrez aussi rendre le binaire PHP exécutable. Dans ce cas-là, traitez le fichier exactement comme si vous aviez un autre script écrit en Perl ou en sh ou en un autre langage de script qui utilise #! comme mécanisme pour lancer l'interpréteur lui-même.
itself.
6.2 Module Apache
Lorsque le PHP est compilé en tant que module Apache, ce module hérite des permissions accordées à l'utilisateur faisant tourner Apache ( par défaut, l'utilisateur "noboby").
7 Configuration
7.1 Le fichier de configuration
Le fichier de configuration (appelé `php3.ini'
dans la version 3.0 du PHP, et simplement `php.ini'
dans la version 4.0) est lu par le PHP au démarrage. Si vous avez compilé
PHP en module, le fichier n'est lu qu'une seule fois, au lancement du démon HTTP.
Pour la version CGI le fichier est lu à chaque invocation.
php_value
name
value
7.1.1 Directives de configuration générale
7.1.1.1 ini.asp-tags
asp_tags
7.1.2 Configuration des directives concernant le mail
7.1.2.1 ini.smtp
SMTP
7.1.3 Directives de configuration du "Safe Mode"
7.1.3.1 ini.safe-mode
safe_mode
7.1.4 Directives de configuration de débbugage.
7.1.4.1 ini.debugger.host
debugger.host
7.1.5 Directives de chargement des extensions
7.1.5.1 ini.enable-dl
enable_dl
7.1.6 MySQL Configuration Directives
7.1.6.1 ini.mysql.allow-persistent
mysql.allow_persistent
7.1.7 Directives de configuration mSQL
7.1.7.1 ini.msql.allow-persistent
msql.allow_persistent
7.1.8 Directives de configuration Postgres
7.1.8.1 ini.pgsql.allow-persistent
pgsql.allow_persistent
7.1.9 Directives de configuration Sybase
7.1.9.1 ini.sybase.allow-persistent
sybase.allow_persistent
7.1.10 Sybase-CT Configuration Directives
7.1.10.1 ini.sybct.allow-persistent
sybct.allow_persistent
7.1.11 Directives de configuration Informix
7.1.11.1 ini.ifx.allow-persistent
ifx.allow_persistent
7.1.12 Directives de configuration pour les calculs mathématiques.
7.1.12.1 ini.bcmath.scale
bcmath.scale
7.1.13 Directives de configuration du navigateur.
7.1.13.1 ini.browscap
browscap
7.1.14 Directives de configuration du driver ODBC unifié
7.1.14.1 ini.uodbc.default-db
uodbc.default_db
8 Caractéristiques
8.1 Gestion des connexions
Note :
Les informations suivantes ne sont valables qu'à partir de la version
3.0.7.
8.2 Cookies
PHP supporte les cookies de manière transparente. Les cookies sont un mécanisme
d'enregistrement d'informations sur le client, et de lecture de ces informations.
Ce système permet d'authentifier et de suivre les visiteurs. Vous pouvez envoyer
un cookie avec la commande setcookie(). Les cookies font partie
de l'entête HTTP, ce qui impose que setcookie() soit appelé
avant tout affichage sur le client. Ce sont les mêmes limitations que pour
header().
8.3 Gestion des erreurs
Il y a 4 types d'erreurs et d'alerte PHP :
8.4 Gestion des chargements de fichier
8.4.1 Chargements de fichiers par méthode POST
PHP est capable de recevoir des fichiers émis par un navigateur conforme à la
norme RFC-1867 (c'est à dire Netscape Navigator 3 ou supérieur, Microsoft
Internet Explorer 3 avec un patch de Microsoft, ou supérieur sans le patch).
Cette fonctionnalité permet de charger des fichiers texte binaire. Avec
l'authentification et les fonctions de manipulation des fichiers, vous avez un
contrôle total sur le chargement et la gestion des fichiers chargés.
<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000"> Send this file: <INPUT NAME="userfile" TYPE="file"> <INPUT TYPE="submit" VALUE="Send File"> </FORM> Le paramètre _URL_ doit pointer sur un fichier PHP. L'option MAX_FILE_SIZE cachée doit précéder le nom du fichier à charger, et représente la taille maximale du fichier à charger. La valeur est donnée en octets. Dans ce script, les valeurs suivantes doivent être définies pour assurer un chargement correct :
Notez que $userfile prend la valeur qui est passée dans le champs INPUT de
type TYPE=file. Dans l'exemple ci dessus, nous avons choisi de l'appeler
"userfile".
8.4.2 Erreurs classiques
La variable MAX_FILE_SIZE ne peut pas spécifier une taille de fichier plus grande que
la taille qui a été fixée par upload_max_filesize, dans le fichier PHP3.ini, ou
par php3_upload_max_filesize dans les directives Apache. La valeur par défaut est
2 Megaoctets.
8.4.3 Chargement multiples de fichiers
Il est possible de charger plusieurs fichiers en même temps, et recevoir les
informations adéquates organisées sous forme de tableau. Pour ce faire, il faut
utiliser la même syntaxe d'envoi dans le code HTML que pour les sélections ou
boîte à cocher multiples.
<form action="file-upload.html" method="post" enctype="multipart/form-data"> Send these files:<br> <input name="userfile[]" type="file"><br> <input name="userfile[]" type="file"><br> <input type="submit" value="Send files"> </form>
8.4.4 Chargement par méthode PUT
PHP supporte la méthode HTTP PUT utilisée par les navigateurs tels que Netscape Composer et W3C Amaya. Les requêtes de type PUT sont beaucoup plus simples que les chargements de fichiers, et elles ressemblent à : PUT /path/filename.html HTTP/1.1
Script PUT /put.php3
<? copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>
8.5 Authentification HTTP avec PHP
Les fonctions d'authentification HTTP de PHP ne sont disponibles que si PHP est
exécuté comme module Apache, et non pas sous la forme d'un CGI. Sous cette forme,
il est possible d'utiliser la fonction header() pour demander
une authentification ("Authentication Required" ) au client, générant ainsi
l'apparition d'une fenêtre de demande d'utilisateur et de mot de passe. Une fois
que les champs ont été remplis, l'URL sera de nouveau appelée, avec les variables
$PHP_AUTH_USER, $PHP_AUTH_PW et $PHP_AUTH_TYPE contenant respectivement le nom
d'utilisateur, le mot de passe et le type d'authentification.
Actuellement, seule l'authentification simple ("Basic") est supportée. Reportez
vous à la fonction header() pour plus d'informations.
<?php if(!isset($PHP_AUTH_USER)) { Header("WWW-Authenticate: Basic realm=\"My Realm\""); Header("HTTP/1.0 401 Unauthorized"); echo "Texte à envoyer si le client appuie sur le bouton d'annulation\n"; exit; } else { echo "Bonjour $PHP_AUTH_USER.<P>"; echo "Vous avez entré le mot de passe $PHP_AUTH_PW.<P>"; } ?>
<?php function authenticate() { Header( "WWW-authenticate: basic realm='Test Authentication System'"); Header( "HTTP/1.0 401 Unauthorized"); echo "You must enter a valid login ID and password to access this resource\n"; exit; } if(!isset($PHP_AUTH_USER) || ($SeenBefore == 1 && !strcmp($OldAuth, $PHP_AUTH_USER)) ) { authenticate(); } else { echo "Welcome: $PHP_AUTH_USER<BR>"; echo "Old: $OldAuth"; echo "<FORM ACTION=\"$PHP_SELF\" METHOD=POST>\n"; echo "<INPUT TYPE=HIDDEN NAME=\"SeenBefore\" VALUE=\"1\">\n"; echo "<INPUT TYPE=HIDDEN NAME=\"OldAuth\" VALUE=\"$PHP_AUTH_USER\">\n"; echo "<INPUT TYPE=Submit VALUE=\"Re Authenticate\">\n"; echo "</FORM>\n"; } ?>
Ce comportement n'est pas nécessaire par le standard d'authentification HTTP Basic.
Les tests avec Lynx ont montré qu'il n'affectait pas les informations de session
lors de la réception d'un message de type 401, ce qui fait que passer ces
informations entre le serveur et le client, et donnera l'accès à la ressource.
8.6 Création d'images
PHP n'est pas limité à la création de fichier HTML. Il peut aussi servir à créer
des images JPG/PNG à la volée, aussi bien pour les émettre que pour les sauver.
Il faut alors compiler PHP avec la librairie GD.
<?php Header("Content-type: image/gif"); $string=implode($argv," "); $im = imagecreatefromgif("images/button1.gif"); $orange = ImageColorAllocate($im, 220, 210, 60); $px = (imagesx($im)-7.5*strlen($string))/2; ImageString($im,3,$px,9,$string,$orange); ImageGif($im); ImageDestroy($im); ?>
Cet exemple sera appelé depuis une page HTML avec un tag tel que: <img
src="button.php3?text">.
Le script ci-dessus récupère le texte de la chaîne $string et l'ajoute sur l'image
de fond"images/button1.gif". Le résultat est alors envoyé au client.
C'est un moyen très pratique d'éviter d'avoir à redessiner des boutons à chaque
fois que le texte du bouton change. Avec ce script, il est généré dynamiquement.
8.7 Connexions persistantes aux bases de données
Les connexions persistantes aux bases de données SQL sont des connexions qui
ne se referment pas à la fin du script. Lorsqu'une connexion persistante est
demandée, PHP s'assure qu'il n'y a pas une autre connexion identique (qui serait
ouverte précédemment, avec le même nom d'hôte, d'utilisateur et de mot de passe),
et si une telle connexion existe, elle est utilisée. Sinon, elle est créée. Une
connexion identique est une connexion qui a ouvert le même hôte, avec le même nom
et même mot de passe (si ils sont nécessaires).
8.8 Utilisation des fichiers à distance
Aussi longtemps que le support de la fonction d'ouverture générique de fichiers
("URL fopen wrapper") est actif lorsque vous configurez PHP (il est inutile de
passer explicitement l'option --disable-url-fopen-wrapper pour
faire la configuration), vous pouvez utiliser des URLs (HTTP et FTP) avec la
plupart des fonctions qui utilisent un nom de fichier comme paramètre, ceci
incluant les expressions require() et
include().
Note :
Vous ne pouvez pas utiliser les fichiers distants dans les expressions
include() et require() avec Windows.
<?;php $file = fopen("http://www.php.net/", "r"); if (!$file) { echo "<p>Impossible d'ouvrir le fichier distant.\n"; exit; } while (!feof($file)) { $line = fgets($file, 1024); /* Cela ne fonctionne que site le titre est écrit sur une ligne.*/ if (eregi("<title>(.*)</title>", $line, $out)) { $title = $out[1]; break; } } fclose($file); ?>
<?;php $file = fopen("ftp://ftp.php.net/incoming/outputfile", "w"); if (!$file) { echo "<p>Impossible d'ouvrir un fichier distant en écriture.\n"; exit; } /* Ecriture des données. */ fputs($file, "$HTTP_USER_AGENT\n"); fclose($file); ?>
Note :
Remarque: Vous pouvez avoir l'idée,à partir de l'exemple ci-dessus, d'utiliser
la même technique pour écrire sur un log distant, mais comme mentionné ci-dessus
vous ne pouvez qu'écrire sur un nouveau fichier en utilisant
les fonctions fopen() avec une URL. Pour faire des log
distribués, nous vous conseillons de regarder la partie
syslog().
9 Langage
9.1 La syntaxe de base
9.1.1 Le passage du HTML au PHP
Il y a quatre moyens pour passer du mode HTML au mode PHP : 1. <? echo ("Ceci est un exemple d'affichage à l'écran en PHP.\n"); ?> 2. <?php echo("Si vous voulez afficher du texte, faites comme ceci.\n"); ?> 3. <script language="php"> echo ("Certain éditeur HTML n'accepte pas les délimiteurs ci-dessus."); </script> 4. <% echo ("Vous pouvez aussi utiliser le style ASP comme délimiteur."); %> <%= $variable; # ceci est un raccourci pour "<%%echo .." %>
9.1.2 Le séparateur d'instruction
Les instructions sont séparées comme en C ou en Perl par un point virgule à chaque
fin d'instruction.
<?php echo "Ceci est un test"; ?> <?php echo "Ceci est un test" ?>
9.1.3 Comments
Le PHP supporte les commentaires comme en C, C++ et Shell Unix. Par exemple: <?php echo "Ceci est un test"; // Ceci est un commentaire sur une ligne comme en C++ /* Ceci est un commentaire sur plusieurs lignes, comme en C et C++ */ echo "Ceci est encore un test"; echo "Enfin, le test final"; # Ceci est un commentaire comme en Shell Unix ?>
<h1>Ceci est un <?# echo "simple";?> exemple.</h1> <p>La ligne du dessus affichera 'Ceci est un exemple'.
Faites attention à ne pas emboîter les commentaires de type 'C', ce qui arrive de
temps en temps lorsque vous voulez commenter une grande partie de code.
<?php /* echo "Ceci est un test"; /* Ce commentaire va poser un problème */ */ ?> 9.2 Les constantes
Le PHP définit un certain nombre de constantes et propose des mécanismes pour
en définir d'autres durant l'exécution. Les constantes se comportent comme des variables,
à l'exception du fait que leur valeur est définie gr‚ce à la fonction
define(), et qu'elle ne peut pas être modifiée par la suite.
<?php define("CONSTANT", "Bonjour le monde."); echo CONSTANT; // affiche "Bonjourle monde." ?> Utilisatin des constantes __FILE__ et __LINE__ <?php function report_error($file, $line, $message) { echo "Une erreur a eu lieu dans le fichier $file à la ligne $line: $message."; } report_error(__FILE__,__LINE__, "Y a un problème!"); ?>
9.3 Les structures de contrôle
Tous les scripts PHP sont une suite d'instructions. Une instruction peut être une
assignation, un appel de fonction, une instruction conditionnelle ou bien une
instruction qui ne fait rien (une instruction vide). Une instruction se termine
habituellement par un point virgule (";"). De plus, plusieurs instructions peuvent
être regroupées en bloc, délimité par des accolades ("{}"). Un bloc est considéré
comme une instruction. Les différents types d'instruction sont décrits dans ce
chapitre.
9.3.1 if
L'instruction if est une des plus importantes instructions de tous les langages, PHP inclus. Elle permet l'exécution conditionnelle d'une partie de code. Les fonctionnalités de l'instruction if sont les mêmes en PHP qu'en C : if (expr) statement
if ($a > $b) print "a est plus grand que b";
if ($a > $b) { print "a est plus grand que b"; $b = $a; }
9.3.2 else
Souvent, vous voulez exécuter une instruction si une condition est remplie, et
une autre instruction si cette condition n'est pas remplie. C'est à cela que sert
else. else fonctionne avec après un
if et exécute les instructions correspondantes au cas oú
l'expression du if est FALSE.
Dans l'exemple suivant, ce bout de code affiche if ($a > $b) { print "a est plus grand que b"; } else { print "a est plus petit que b"; }
Les instructions après le else ne sont exécutées que si
l'expression du if est FALSE, et si elle
n'est pas suivi par l'expression elseif.
9.3.3 elseif
elseif, comme son nom l'indique, est une combinaison de
if et else. Comme l'expression else,
il permet d'exécuter une instruction aprè un if dans le cas oú
le "premier" if est évalué comme FALSE. Mais, à la différence
de l'expression else, il n'exécutera l'instruction que si
l'expression condionnelle elseif est évaluée comme TRUE.
L'exemple suivant affichera if ($a > $b) { print "a est plus grand que b"; } elseif ($a == $b) { print "a est égal à b"; } else { print "a est plus petit que b"; }
9.3.4 Syntaxe alternative
Le PHP propose une autre manière de rassembler des instructions à l'intérieur d'un bloc, pour les fonctions de contrôle if, while, for, et switch. Dans chaque cas, le principe est de remplacer l'accolade d'ouverture par deux points (:) et l'accolade de fermeture par, respectivement, endif;, endwhile;, endfor;, ou endswitch;. <?php if ($a == 5): ?> A is equal to 5 <?php endif; ?>
if ($a == 5): print "a equals 5"; print "..."; elseif ($a == 6): print "a equals 6"; print "!!!"; else: print "a is neither 5 nor 6"; endif;
9.3.5 while
La boucle while est le moyen le plus simple d'implémenter une boucle en PHP. Cette boucle se comporte de la même manière qu'en C. L'exemple le plus simple d'une boucle while est le suivant : while (expr) statement
while (expr): statement ... endwhile;
/* exemple 1 */ $i = 1; while ($i <= 10) { print $i++; /* La valeur affiche est $i avant l'incrémentation (post-incrémentation) */ } /* exemple 2 */ $i = 1; while ($i <= 10): print $i; $i++; endwhile;
9.3.6 do..while
Les boucles do..while ressemblent beaucoup aux boucles
while, mais l'expression est testée à la fin de chaque itération
plutôt qu'au début. La principale différence par rapport à la boucle
while est que la première itération de la boucle
do..while est toujours exécutée (l'expression n'est testée qu'à
la fin de l'itération), ce qui n'est pas le cas lorsque vous utilisez une boucle
while (l'expression est vérifiée au début de chaque itération).
$i = 0; do { print $i; } while ($i>0);
do { if ($i < 5) { print "i n'est pas suffisamment grand"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } print "i est bon"; ...process i... } while(0);
9.3.7 for
Les boucles for sont les boucles les plus complexes en PHP. Elles fonctionnent comme les boucles for du langage C. La syntaxe des boucles for est la suivante: for (expr1; expr2; expr3) statement
/* exemple 1 */ for ($i = 1; $i <= 10; $i++) { print $i; } /* exemple 2 */ for ($i = 1;;$i++) { if ($i > 10) { break; } print $i; } /* exemple 3 */ $i = 1; for (;;) { if ($i > 10) { break; } print $i; $i++; } /* exemple 4 */ for ($i = 1; $i <= 10; print $i, $i++) ;
for (expr1; expr2; expr3): statement; ...; endfor;
9.3.8 foreach
PHP4 (mais pas PHP3) inclus une commande foreach, comme en Perl ou d'autres langages. C'est un moyen simple de passer en revue un tableau. Il y a deux syntaxes possibles : la seconde est une extension mineure mais pratique de la première: foreach(array_expression as $value) statement foreach(array_expression as $key => $value) statement
reset ($arr); while (list(, $value) = each ($arr)) { echo "Valeur: $value<br>\n"; } foreach ($arr as $value) { echo "Valeur: $value<br>\n"; } Les exemples suivants sont aussi fonctionnellement identiques : reset ($arr); while (list($key, $value) = each ($arr)) { echo "Clé: $key; Valeur: $value<br>\n"; } foreach ($arr as $key => $value) { echo "Clé: $key; Valeur: $value<br>\n"; }
/* exemple 1: valeur seule */ $a = array (1, 2, 3, 17); foreach ($a as $v) { print "Valeur courante de \$a: $v.\n"; } /* exemple 1: valeur (avec clé associée) */ $a = array (1, 2, 3, 17); $i = 0; /* pour affichage seulement*/ foreach($a as $v) { print "\$a[$i] => $k.\n"; } /* exemple 1: valeur et clé */ $a = array ( "one" => 1, "two" => 2, "three" => 3, "seventeen" => 17 ); foreach($a as $k => $v) { print "\$a[$k] => $v.\n"; }
9.3.9 break
L'instruction break permet de sortir d'une structure
if, for, while, ou
switch.
$i = 0; while ($i < 10) { if ($arr[$i] == "stop") { break; /* Vous pouvez aussi écrire 'break 1;' ici. */ } $i++; } /* Utilisation de l'argument optionnel. */ $i = 0; while ( ++$i ) { switch ( $i ) { case 5: echo "à 5<br>\n"; break 1; /* Ne sort que du switch. */ case 10: echo "à 10; quitting<br>\n"; break 2; /* Sort du switch et du while. */ default: break; } }
9.3.10 continue
L'instruction continue est utilisée dans une boucle afin
d'éluder les instructions de l'itération courante afin de passer directement à
l'itération suivante.
while (list ($cle, $valeur) = each ($arr)) { if (!($cle % 2)) { // évite les membres impairs continue; } fonction_quelconque($valeur); } $i = 0; while ($i++ < 5) { echo "Dehors<br>\n"; while (1) { echo " Milieu<br>\n"; while (1) { echo " Intérieur<br>\n"; continue 3; } echo "Ceci n'est jamais atteint.<br>\n"; } echo "Ceci non plus.<br>\n"; }
9.3.11 switch
L'instruction switch équivaut à une série d'instructions
if. En de nombreuses occasions, vous aurez besoin de comparer
la même variable (ou expression) avec un grand nombre de valeurs différentes, et
d'exécuter différentes parties de code suivant la valeur à laquelle elle est égale.
C'est exactement à cela que sert l'instruction switch.
if ($i == 0) { print "i égale 0"; } if ($i == 1) { print "i égale 1"; } if ($i == 2) { print "i égale 2"; } switch ($i) { case 0: print "i égale 0"; break; case 1: print "i égale 1"; break; case 2: print "i égale 2"; break; }
switch ($i) { case 0: print "i égale 0"; case 1: print "i égale 1"; case 2: print "i égale 2"; }
switch ($i) { case 0: case 1: case 2: print "i est plus petit que 3 mais n'est pas négatif"; break; case 3: print "i égale 3"; }
switch ($i) { case 0: print "i égale 0"; break; case 1: print "i égale 1"; break; case 2: print "i égale 2"; break; default: print "i n'est ni égal à 2, ni à 1, ni à 0."; }
switch ($i): case 0: print "i égale 0"; break; case 1: print "i égale 1"; break; case 2: print "i égale 2"; break; default: print "i n'est ni égal à 2, ni à 1, ni à 0"; endswitch;
9.3.12 require()
La commande require() se remplace elle même par le contenu du
fichier spécifié, comme les préprocesseurs C le font avec la commande
#include.
require ('header.inc');
require ("file.inc?varone=1&vartwo=2"); /* Ne fonctionne pas. */ $varone = 1; $vartwo = 2; require ("file.inc"); /* $varone et $vartwo seront accessible à file.inc */
9.3.13 include()
La fonction include() inclus et évalue le fichier spécifié en
argument.
$files = array ('first.inc', 'second.inc', 'third.inc'); for ($i = 0; $i < count($files); $i++) { include $files[$i]; }
/* Ceci est faux, et ne fonctionnera pas ce qu'on attend. */ if ($condition) include($file); else include($other); /* Ceci est CORRECT. */ if ($condition) { include($file); } else { include($other); }
On suppose que le fichier `test.inc' existe, et est placé dans le même dossier que le fichier principal :<?;php echo "Avant le retour<br>\n"; if (1) { return 27; } echo "Après le retour <br>\n"; ?> Il est important de noter que lorsqu'un fichier est include() ou require(), les erreurs d'analyse apparaîtront en HTML tout au début du fichier, et l'analyse du fichier parent ne sera pas interrompue. Pour cette raison, le code qui est dans le fichier doit être placé entre 9.1.1 Le passage du HTML au PHP. include ("file.inc?varone=1&vartwo=2"); /* ne fonctionne pas. */ $varone = 1; $vartwo = 2; include ("file.inc"); /* $varone et $vartwo sont accessibles dans file.inc */
9.3.14 require_once()
La commande require_once() se remplace elle même
par le fichier spécifié, un peu comme les commandes de préprocesseur C
#include, et ressemble sur ce point à
require(). La principale différence est qu'avec
require_once(), vous êtes assurés que ce code ne
sera ajouté qu'une seule fois, évitant de ce fait les redéfintions de
variables ou de fonctions, génératrices d'alertes.
<?php define(PHPVERSION, floor(phpversion())); echo "LES GLOBALES SONT SYMPAS\n"; function goodTea() { return "Le Earl Grey est délicieux!"; } ?> <?php require ("utils.inc"); function showVar($var) { if (PHPVERSION == 4) { print_r($var); } else { dump_var($var); } } // Une série de fonctions ?> Puis, vous écrivez un script cause_error_require.php cause_error_require.php <?php require("foolib.inc"); /* Ceci génère une erreur*/ require("utils.inc"); $foo = array("1",array("complex","quaternion")); echo "Ce code requiert utils.inc une deuxième fois, car il est requis \n"; echo "dans foolib.inc\n"; echo "Utilisation de GoodTea: ".goodTea()."\n"; echo "Affichage de foo: \n"; showVar($foo); ?> Lorsque vous exécutez le script ci dessus, le résultat sera (sous PHP 4.01pl2): GLOBALS ARE NICE GLOBALS ARE NICE Fatal error: Cannot redeclare causeerror() in utils.inc on line 5 En modifiant foolib.inc et cause_errror_require.php pour qu'elles utilisent require_once() au lieu de require() et ne renommant le fichier en avoid_error_require_once.php, on obtiend : foolib.inc (corrigé) ... require_once("utils.inc"); function showVar($var) { ... ... require_once("foolib.inc"); require_once("utils.inc"); $foo = array("1",array("complex","quaternion")); ... L'exécution de ce script, sous PHP 4.0.1pl2, donne : LES GLOBALES SONT SYMPA Ce code requiert utils.inc une deuxième fois, car il est requis dans foolib.inc Utilisation de GoodTea: Le Earl Grey est délicieux! Affichage de foo: Array ( [0] => 1 [1] => Array ( [0] => complex [1] => quaternion ) )
9.3.15 include_once()
La commande include_once() inclus et évalue le fichier
spécifié durant l'exécution du script. Le comportement est similaire à
include(), mais la différence est que si le code a déjà
été inclus, il ne le sera pas une seconde fois.
9.4 Les expressions
Les expressions sont la partie la plus importante du PHP. En PHP, presque tout
ce que vous écrivez est une expression. La manière la plus simple de définir
une expression est : "tout ce qui a une valeur".
function foo () { return 5; }
$first ? $second : $third
Si la valeur de la première sous-expression est vraie, (différente de 0), alors la
deuxième sous-expression est évaluée et constitue le résultat de l'expression conditonnelle.
Sinon, c'est la troisème sous-expression qui est évaluée et qui constitue le
résultat de l'expression.
function double($i) { return $i*2; } $b = $a = 5; /* assigne la valeur 5 aux variables $a et $b */ $c = $a++; /* post-incrémentation de la variable $a et assignation de la valeur à la variable $c */ $e = $d = ++$b; /* Pré-incrémentation, et assignation de la valeur aux variables $d et $e */ /* à ce niveau, les variables $d et $e sont égales à 6 */ $f = double($d++); /* assignation du double de la valeur de $d à la variable $f ($f vaut 12), puis incrémentation de la valeur de $d */ $g = double(++$e); /* assigne deux fois la valeur de $e après incrémentation, 2*7 = 14 to $g */ $h = $g += 10; /* Tout d'abord, $g est incrémentée de 10, et donc $g vaut 24. Ensuite, la valeur de $g, (24) est assignée à la variable $h, qui vaut donc elle aussi 24. */
9.5 Fonctions
9.5.1 Les fonctions utilisateurs
une fonction peut être définie en utilisant la syntaxe suivante : function foo ($arg_1, $arg_2, ..., $arg_n) { echo "Exemple de fonction.\n"; return $retval; }
9.5.2 Les arguments de fonction
Des informations peuvent être passées à une fonction en utilisant un tableau
d'arguments, dont chaque élément est séparé par une virgule. Un élément peut
être une variable ou une constante.
function takes_array($input) { echo "$input[0] + $input[1] = ", $input[0]+$input[1]; }
9.5.2.1 Passage d'arguments par référence
Par défaut, les arguments sont passés à la fonction par valeur
(donc vous pouvez changer la valeur d'un argument dans la fonction, cela ne
change pas sa valeur à l'extérieur de la fonction). Si vous voulez que vos
fonctions puisse changer la valeur des arguments, vous devez passer ces arguments
par référence.
function add_some_extra(&$string) { $string .= ', et un peu plus.'; } $str = 'Ceci est une chaîne'; add_some_extra($str); echo $str; // affiche 'Ceci est une chaîne, et un peu plus.'
function foo ($bar) { $bar .= ', et un peu plus.'; } $str = Ceci est une chaîne'; foo ($str); echo $str; // affiche 'Ceci est une chaîne' foo (&$str); echo $str; // affiche 'Ceci est une chaîne, et un peu plus.'
9.5.2.2 Valeur par défaut des arguments
Vous pouvez définir comme en C++ des valeurs par défaut pour les arguments de type scalaire : function makecoffee ($type = "cappucino") { return "Faire une casse de $type.\n"; } echo makecoffee (); echo makecoffee ("thé");
Faire une tasse de cappucino. Faire une tasse de thé.
function makeyogurt ($type = "acidophilus", $flavour) { return "Préparer un bol de $type $flavour.\n"; } echo makeyogurt ("framboise"); // ne fonctionne pas comme voulu
Warning: Missing argument 2 in call to makeyogurt() in /usr/local/etc/httpd/htdocs/php3test/functest.html on line 41 Préparer un bol de framboise.
function makeyogurt ($flavour, $type = "acidophilus") { return "Préparer un bol de $type $flavour.\n"; } echo makeyogurt ("framboise"); // fonctionne comme voulu
Préparer un bol de acidophilus framboise.
9.5.2.3 Variable-length argument lists
PHP4 supporte les fonction à nombre d'arguments variable. C'est très simple à utiliser,
avec les fonctions func_num_args(), func_get_arg(),
et func_get_args().
9.5.3 Les valeurs de retour
Les valeurs sont renvoyées en utilisant une instruction de retour optionnelle. Tous types de variables peuvent être renvoyées, tableaux et objets compris. function square ($num) { return $num * $num; } echo square (4); // affiche '16'.
function small_numbers() { return array (0, 1, 2); } list ($zero, $one, $two) = small_numbers();
9.5.4 old_function
L'instruction old_function vous permet de déclarer une
fonction en utilisant une syntaxe du type PHP/FI2 (au détail près que vous
devez remplacer l'instruction 'function' par 'old_function'.)
9.5.5 Variable functions
PHP supporte le concept de fonctions variables. Cela signifie que si le nom d'une
variable est entourée de parenthèses, PHP recherchera une fonction de même nom,
et essaiera de l'exécuter. Cela peut servir, entre autre, lors de call back,
de tables de fonctions...
<?php function foo() { echo "dans foo()<br>\n"; } function bar( $arg = '' ) { echo "Dans bar(); l'argument était '$arg'.<br>\n"; } $func = 'foo'; $func(); $func = 'bar'; $func( 'test' ); ?>
9.6 Classes et objets
9.6.1 class
Une classe est une collection de variables et de fonctions qui concernent ces variables. Une classe est définie en utilisant la syntaxe suivante : <?php class Cart { var $items; // Eléments de notre panier // Ajout de $num articles de type $artnr au panier function add_item ($artnr, $num) { $this->items[$artnr] += $num; } // Suppression de $num articles du type $artnr du panier function remove_item ($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } else { return false; } } } ?>
$cart = new Cart; $cart->add_item("10", 1);
L'instruction ci-dessus crée l'objet $cart de la class Cart. La fonction add_item()
est appelée afin d'ajouter l'article numéro 10 dans la panier.
class Named_Cart extends Cart { var $owner; function set_owner ($name) { $this->owner = $name; } }
L'exemple ci-desssus définit la classe Named_Cart qui possède les même variables
que la classe Cart et la variable $owner en plus, ainsi que la fonction
set_owner(). Vous créez un panier nominatif de la même manière que précédemment, et
vous pouvez alors affecter un nom au panier ou en connaître le nom. Vous pouvez de
toutes façons utiliser les mêmes fonctions que sur un panier classique.
$ncart = new Named_Cart; // Création d'un panier nominatif $ncart->set_owner ("kris"); // Affectation du nom du panier print $ncart->owner; // Affichage du nom du panier $ncart->add_item ("10", 1); // (héritage des fonctions de la classe père)
Dans les fonctions d'une classe, la variable $this est égale à l'objet de la
classe. Vous pouvez utilisez la forme "$this->quelquechose" pour accéder aux
fonctions ou aux variables de l'objet courant.
class Auto_Cart extends Cart { function Auto_Cart () { $this->add_item ("10", 1); } }
L'exemple ci-dessus définit la classe Auto_Cart qui hérite de la classe Cart et
définit le construteur de la classe. Ce dernier initialise le panier avec 1
article de type numéro 10 dès que l'instruction "new" est appelée. La fonction
constructeur peut prendre ou non, des paramètres optionnels, ce qui la rend
beaucoup plus pratique.
class Constructor_Cart extends Cart { function Constructor_Cart ($item = "10", $num = 1) { $this->add_item ($item, $num); } } // Place dans le caddie toujours la même chose... $default_cart = new Constructor_Cart; // Place dans le caddie des objets différents, comme dans la réalité $different_cart = new Constructor_Cart ("20", 17);
Pour les classes qui utilisent l'héritage, le constructeur de la classe
père n'est pas automatiquement appelé lorsque le constructeur de la classe
dérivée est appelé.
9.7 Les opérateurs
9.7.1 Les opérateurs arithmétiques
Vous rappelez vous des opérations élémentaires apprises à l'école ?
9.7.2 Les opérateurs d'assignement
L'opérateurs d'assignement le plus simple est le signe "=". Le premier réflexe est de penser que ce signe veut dire "égal à". Ce n'est pas le cas. Il signifie que l'opérande de gauche se voit affecter la valeur de l'expression qui est à droite du signe égal.
$a = 3; $a += 5; // affecte la valeur 8 à la variable $a. (correspond à l'instruction '$a = $a + 5'); $b = "Hello "; $b .= "There!"; // affecte la valeur "Bonjour ici!" à la variable $b (correspond à $b = $b."ici!"; On peut noter que l'assignement copie le contenu de la variable originale dans la nouvelle (assignement par valeur), ce qui fait que les changements de valeur d'une variable ne modifieront pas la valeur de l'autre. Cela peut se revéler important lors de la copie d'un grand tableau durant une boucle. PHP4 supporte aussi l'assignement par référence, en utilisant la syntaxe $var =
&$othervar; , mais ce n'était pas possible en
PHP3. 'L'assignement par référence' signifie que les deux variables contiennent les
mêmes données, et que la modification de l'une affecte l'autre. D'un autre
coté, la recopie est très rapide.
9.7.3 Bitwise Operators
Bitwise operators allow you to turn specific bits within an integer
on or off.
9.7.4 Opérateurs de comparaison
Les opérateurs de comparaison, comme le nom l'indique, vous permettent de comparer deux valeurs.
(expr1) ? (expr2) : (expr3);
Cette expression renvoie la valeur de l'expression expr2
si l'expression expr1 est vraie, et l'expression expr3
si l'expression expr1 est fausse.
9.7.5 Opérateur de contrôle d'erreur
PHP supports one error control operator: the at sign (@). When
prepended to an expression in PHP, any error messages that might
be generated by that expression will be ignored.
<?php /* Intentional SQL error (extra quote): */ $res = @mysql_query( "select name, code from 'namelist" ) or die( "Query failed: error was '$php_errormsg'" ); ?>
9.7.6 Opérateur d'exécutions
PHP supports one execution operator: backticks (``). Note that these are not single-quotes! PHP will attempt to execute the contents of the backticks as a shell command; the output will be returned (i.e., it won't simply be dumped to output; it can be assigned to a variable). $output = `ls -al`; echo "<pre>$output</pre>";
9.7.7 Incrementing/Decrementing Operators
PHP supports C-style pre- and post-increment and decrement
operators.
<?php echo "<h3>Postincrement</h3>"; $a = 5; echo "Should be 5: " . $a++ . "<br>\n"; echo "Should be 6: " . $a . "<br>\n"; echo "<h3>Preincrement</h3>"; $a = 5; echo "Should be 6: " . ++$a . "<br>\n"; echo "Should be 6: " . $a . "<br>\n"; echo "<h3>Postdecrement</h3>"; $a = 5; echo "Should be 5: " . $a-- . "<br>\n"; echo "Should be 4: " . $a . "<br>\n"; echo "<h3>Predecrement</h3>"; $a = 5; echo "Should be 4: " . --$a . "<br>\n"; echo "Should be 4: " . $a . "<br>\n"; ?>
9.7.8 Les opérateurs logiques
La raison pour laquelle il existe deux types de "ET" et de "OU" est qu'ils ont
des priorités différentes. Voir le paragraphe 9.7.9 La précédence des opérateurs.
9.7.9 La précédence des opérateurs
La priorité des opérateurs spécifie l'ordre dans lequel les valeurs doivent être analysées. Par exemple, dans l'expression 1 + 5 * 3, le résultat est 16 et non 18, car la multiplication ("*") à une priorité supérieure par rapport à à l'addition ("+").
9.7.10 String Operators
Il y a deux opérateurs de chaînes. Le premier est l'opérateur de
concaténation ('.'), qui retourne la concaténation de ses deux arguments.
Le second est l'opérateur d'assignement concaténant ('.='). Reportez vous à 9.7.2 Les opérateurs d'assignement
pour plus de détails.
$a = "Bonjour "; $b = $a . "Monde!"; // $b contient "Bonjour Monde!" $a = "Bonjour "; $a = $a . "Monde!"; // $a contient "Bonjour Monde!"
9.8 Types
PHP supporte les types suivants :
9.8.1 Entiers
Il est possible de spécifier les nombres entiers (integers) de la manière suivante : $a = 1234; # nombre entier en base 10 $a = -123; # nombre entier négatif $a = 0123; # nombre entier en base 8, octale (équivalent à 83 en base 10) $a = 0x12; # nombre entier en base 16, hexadécimale (équivalent à 18 en base 10)
9.8.2 Les nombres à virgule flottante
Les nombres à virgule flottante ("double") peuvent êtres spécifiés en utilisant la syntaxe suivante: $a = 1.234; $a = 1.2e3;
9.8.3 Les chaînes de caractères
Les chaînes de caractères peuvent être définies en utilisant deux types de
délimiteurs.
Le deuxième moyen de délimiter une chaîne de caractère est d'utiliser les guillemets simples ('). Dans une telle chaîne de caractères, les variables ne seront pas évaluées, et le caractère backslash n'aura aucun effet (à deux exceptions près, pour "\\" et "\'", afin de pouvoir utiliser les caractères guillemets simples, et backslash dans la chaîne de caractères). Un autre moyen de délimiter les chaînes est d'utilise la syntaxe de Here doc (en français, doc ici): <<<, suivi d'un identifiant arbitraire, puis de la chaîne. Cette séquence se termine par l'identifiant initial, placé en premier sur une nouvelle ligne. Exemple de chaîne doc $str = <<<EOD Exemple de chaîne s'étalant sur plusieurs lignes avec la syntaxe heredoc EOD;
<?php /* Assignation d'une chaîne */ $str = "Ceci est une chaîne "; /* Concaténation d'une chaîne */ $str = $str . " avec une extension"; /* Une autre méthode de concaténation, y compris une nouvelle ligne */ $str .= " et terminée par une nouvelle ligne.\n"; /* Cette chaî se terminera par '<p>Nombre: 9</p>' */ $nombre = 9; $str = "<p>Nombre: $nombre</p>"; /* Cette ci sera '<p>Nombre: $num</p>' */ $num = 9; $str = '<p>Nombre: $num</p>'; /* Lire le premier caractère d'une chaîne */ $str = 'Ceci est un test.'; $first = $str[0]; /* Lire le dernier caractère d'une chaîne */ $str = 'Ceci est un autre test.'; $last = $str[strlen($str)-1]; ?>
9.8.3.1 Conversion de type
Lorsqu'une chaîne de caractère est évaluée comme une valeur numérique, le résultat et le type de la variable sont déterminés comme suit. $foo = 1 + "10.5"; // $foo est du type double (11.5) $foo = 1 + "-1.3e3"; // $foo est du type double (-1299) $foo = 1 + "bob-1.3e3"; // $foo est du type integer (1) $foo = 1 + "bob3"; // $foo est du type integer (1) $foo = 1 + "10 Small Pigs"; // $foo est du type integer (11) $foo = 1 + "10 Little Piggies"; // $foo est du type integer (11) $foo = "10.0 pigs " + 1; // $foo est du type integer (11) $foo = "10.0 pigs " + 1.0; // $foo est du type double (11)
Pour plus d'informations sur les conversions de type, voir les pages de man à propos de la fonction strtod(3).
echo "\$foo==$foo; type is " . gettype( $foo ) . "<br>\n";
9.8.4 Les tableaux
Les tableaux ressemblent aux tables de hashage (tableaux associatifs) et aux tableaux indexés (vecteurs). 9.8.4.1 Tableaux à une dimension
PHP supporte les tableaux scalaires et les tableaux associatifs. En fait, il n'y a aucune différence entre les deux. Vous pouvez créer un tableau en utilisant les fonctions list() ou array(), ou bien en affectant explicitement chacune des valeurs. $a[0] = "abc"; $a[1] = "def"; $b["foo"] = 13;
$a[] = "hello"; // $a[2] == "hello" $a[] = "world"; // $a[3] == "world"
9.8.4.2 Tableaux à plusieurs dimensions
Les tableaux à plusieurs dimensions sont extrêmement simples. Pour chaque dimension du tableau, vous ajouter une nouvelle [clef] à la fin: $a[1] = $f; # tableau à une dimension $a["foo"] = $f; $a[1][0] = $f; # tableau à deux dimensions $a["foo"][2] = $f; # (vous pouvez mélanger les indices associatifs et numériques) $a[3]["bar"] = $f; # (vous pouvez mélanger les indices associatifs et numériques) $a["foo"][4]["bar"][0] = $f; # tableau à quatre dimensions
$a[3]['bar'] = 'Bob'; echo "Cela ne marche pas : $a[3][bar]";
En PHP3, l'exemple ci dessu va afficher : $a[3]['bar'] = 'Bob'; echo "Cela ne marche pas : " . $a[3][bar];
$a[3]['bar'] = 'Bob'; echo "Cela marche : {$a[3][bar]}";
# Exemple 1: $a["color"] = "red"; $a["taste"] = "sweet"; $a["shape"] = "round"; $a["name"] = "apple"; $a[3] = 4; # Exemple 2: $a = array( "color" => "red", "taste" => "sweet", "shape" => "round", "name" => "apple", 3 => 4 );
<? $a = array( "apple" => array( "color" => "red", "taste" => "sweet", "shape" => "round" ), "orange" => array( "color" => "orange", "taste" => "tart", "shape" => "round" ), "banana" => array( "color" => "yellow", "taste" => "paste-y", "shape" => "banana-shaped" ) ); echo $a["apple"]["taste"]; # will output "sweet" ?>
9.8.5 Les objets
9.8.5.1 Initialisation d'un objet
Pour initialiser un objet, vous devez utiliser la commande "new" afin de créer líinstance de l'objet. class foo { function do_foo () { echo "Doing foo."; } } $bar = new foo; $bar->do_foo();
9.8.6 Définition du type
PHP ne nécessite pas de déclaration explicite du type d'une variable.
Le type d'une variable est déterminé par le contexte d'utilisation.
Par exemple, si vous assignez une chaîne de caractères à la variable var,
var devient une chaîne de caractère. Si vous assignez un nombre entier à var,
elle devient un entier.
$foo = "0"; // $foo est une chaîne de caractères (ASCII 48) $foo++; // $foo est la chaîne de caractères "1" (ASCII 49) $foo += 1; // $foo est maintenant du type entier (2) $foo = $foo + 1.3; // $foo est maintenant du type double (3.3) $foo = 5 + "10 Little Piggies"; // $foo est du type entier (15) $foo = 5 + "10 Small Pigs"; // $foo est du type entier (15)
echo "\$foo==$foo; type is " . gettype( $foo ) . "<br>\n";
$a = 1; // $a est un entier $a[0] = "f"; // $a devient un tableau, avec $a[0] qui contient "f"
$a = "1"; // $a est une chaîne $a[0] = "f"; // Qu'est ce qu'une position dans une chaîne ? que se passe t il?
9.8.6.1 Transtypage
La conversion de type en PHP fonctionne de la même manière qu'en C: le nom du type désiré est écrit entre parenthèses devant la variable à transtyper ("cast"). $foo = 10; // $foo is an integer $bar = (double) $foo; // $bar est un double
$foo = (int) $bar; $foo = ( int ) $bar;
$var = 'ciao'; $arr = (array) $var; echo $arr[0]; // outputs 'ciao'
$var = 'ciao'; $obj = (object) $var; echo $obj->scalar; // outputs 'ciao'
9.9 Les variables
9.9.1 Essentiel
En PHP, les variables sont représentées par un signe dollar suivi du nom de la variable. Le nom est sensible à la casse (ie : $x != $X). $var = "Bob"; $Var = "Joe"; echo "$var, $Var"; // outputs "Bob, Joe"
<?php $foo = 'Pierre'; // Assigne la valeur 'Pierre' à $foo $bar = &$foo; // Référence $foo avec $bar. $bar = "Mon nom est Pierre"; // Modifie $bar... echo $foo; // $foo est aussi modifiée echo $bar; ?>
<?php $foo = 25; $bar = &$foo; // Assignement valide . $bar = &(24 * 7); // Assignement Invalide : référence une expression sans nom function test() { return 25; } $bar = &test(); // Invalide. ?>
9.9.2 Variables prédéfinies
PHP fourni un grand nombre de variables prédéfinies. Cependant, beaucoup de
ces variables ne peuvent pas être présentées ici, car elles dépendent du serveur
sur lequel elles tournent, de la version du serveur, et de la configuration du
serveur, ou encore d'autres facteurs.. Certaines de ces variables ne seront pas
accessibles lorsque PHP fonctionne en exécutable.
9.9.2.1 Variables Apache
Ces variables sont créées par le serveur Apache
Si vous utilisez un autre serveur web, il n'est pas sur que celui ci vous fournira
les mêmes variables. Il peut ne pas les fournir, en fournir d'autres. Cependant,
un bon nombre de ces variables font partie de l'interface
CGI 1.1, et on peut s'attendre à les retrouver.
9.9.2.2 Variables d'environnement
Ces variables sont importées dans l'espace de nom global de PHP's, depuis
l'environnement sous lequel PHP fonctionne. Beaucoup d'entre elles sont
fournies par le shell qui exécute PHP et différents systèmes étant suceptibles
de disposer de différents shells, une liste définitive est impossible à établir.
Reportez vous à la documentation de votre shell, pour connaître la liste des
variables d'environnement prédéfinies.
9.9.2.3 Variables PHP
Ces variables sont créées par PHP lui_même.
9.9.3 Portée des variables
La portée d'une variable dépends du contexte dans lequel la variable est définie.
Pour la plupart des variables, la portée concerne la totalité d'un script PHP.
Mais, lorsque vous définissez une fonction, la portée d'une variable
définie dans cette fonction est locale à la fonction.
Par exemple:
$a = 1; include "b.inc";
Ici, la variable $a sera accessible dans le script inclus `b.inc'.
Cependant, dans les fonctions définies par l'utilisateur, une nouvelle définition
de cette variable sera donnée, limitée à la fonction. Toute variable utilisée dans
une fonction est par définition, locale. Par exemple :
$a = 1; /* portée global */ Function Test () { echo $a; /* portée locale */ } Test (); Le script n'affichera rien à l'écran car la fonction echo() utilise la variable local $a, et celle-ci n'a pas été assignée préalablement dans la fonction. Vous pouvez noter que ce concept diffère un petit peu du langage C dans lequel une variable globale est automatiquement accessible dans les fonctions, à moins d'être redéfinie localement dans la fonction. Cela peut poser des problèmes si vous redéfinissez des variables globales localement. En PHP, une variable globale doit être déclarée à l'intérieure de chaque fonction afin de pouvoir être utilisée dans cette fonction. Par exemple: $a = 1; $b = 2; Function Sum () { global $a, $b; $b = $a + $b; } Sum (); echo $b;
$a = 1; $b = 2; Function Sum () { $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; } Sum (); echo $b;
Le tableau $GLOBALS est un tableau associatif avec le nom
des variables globales comme clef et les valeurs des éléments
du tableau comme valeur des variables.
Function Test () { $a = 0; echo $a; $a++; }
Cette fonction est un peu inutile car à chaque fois qu'elle est appelée,
elle initialise $a à 0 et affiche "0". L'incrémentation de la variable ($a++)
ne sert pas à grand chose car dès que la fonction est terminée la variable
disparaît. Pour faire une fonction de comptage utile, c'est-à-dire qui ne
perdra pas la trace du compteur, la variable $a est déclarée comme une
variable static:
Function Test () { static $a = 0; echo $a; $a++; }
Maintenant, à chaque fois que la fonction Test() est appelée, elle
affichera une valeur de $a incrémentée de 1.
Function Test () { static $count = 0; $count++; echo $count; if ($count < 10) { Test (); } $count--; } 9.9.4 Les variables dynamiques
Il est pratique d'avoir parfois des noms de variables qui sont variables.
C'est-à-dire un nom de variable qui affecté et utilisé dynamiquement. Une
variable classique est affecté avec l'instruction suivante:
$a = "bonjour";
Une variable dynamique prend la valeur d'une variable et l'utilise
comme nom d'une autre variable. Dans l'exemple ci-dessous,
bonjour, peut être utilisé comme le nom d'une
variable en utilisant le "$$" précédent la variable. c'est-à-dire
$$a = "le monde";
A ce niveau, deux variables ont été définies et stockées dans l'arbre
des symboles PHP: $a avec comme valeur "bonjour" et $bonjour avec comme
valeur "le monde". Alors, l'instruction
echo "$a ${$a}";
produira le même affichage que :
echo "$a $bonjour";
c'est-à-dire : bonjour le monde.
9.9.5 Variables externes à PHP
9.9.5.1 Formulaires HTML (GET et POST)
Lorsqu'un formulaire est envoyé à un script PHP, toutes les variables
du formulaire seront automatiquement disponibles dans le
script. Par exemple, considérons le formulaire suivant:
<form action="foo.php3" method="post"> Name: <input type="text" name="name"><br> <input type="submit"> </form>
<form action="array.php" method="post"> Name: <input type="text" name="personal[name]"><br> Email: <input type="text" name="personal[email]"><br> Beer: <br> <select multiple name="beer[]"> <option value="warthog">Warthog <option value="guinness">Guinness <option value="stuttgarter">Stuttgarter Schwabenbräu </select> <input type="submit"> </form>
9.9.5.1. Bouton "submit" sous forme d'image
Lorsque vous envoyez le résultat d'un formulaire, vous pouvez utiliser une
image au lieu du bouton "submit" standard en utilisant un tag :
<input type=image src="image.gif" name="sub">
Lorsqu'un utilisateur clique sur l'image, le formulaire sera transmis au
serveur avec deux variables de plus, sub_x et sub_y. Ces deux variables
contiennent les coordonnées de l'endroit oú l'utilisateur à cliqué. Les
utilisateurs expérimentés remarquerons que les noms de variables sont transmis
avec une virgule à la place du caractère "_", mais le PHP fait la conversion
automatiquement.
9.9.5.2 HTTP Cookies
Le PHP supporte les cookies HTTP de manière totalement transparente, comme
défini dans les Netscape's Spec. Les cookies
sont un mécanisme permettant de stocker des données sur la machine
cliente à des fins d'authentification de l'utilisateur. Vous pouvez établir un
cookie gr‚ce à la fonction setcookie(). Les cookies
font partie intégrante du "header" HTTP, et donc la fonction
setcookie() doit être appelé avant que le moindre
affichage ne soit envoyé au navigateur. C'est la même restriction que pour
la fonction header(). Tout cookie envoyé depuis le
client sur le serveur sera automatiquement stocké sous forme de variable,
comme pour la méthode POST ou GET.
SetCookie ("MyCookie[]", "Testing", time()+3600);
Il est à noter qu'un cookie remplace le cookie précédent par un cookie de
même nom tant que le "path" ou le domaine sont identiques. Donc, pour un
"shopping cart", vous devez implémenter un compteur et l'incrémenter au fur
et à mesure. C'est-à-dire:
$Count++; SetCookie ("Count", $Count, time()+3600); SetCookie ("Cart[$Count]", $item, time()+3600); 9.9.5.3 Variables d'environnement
Le PHP fait en sorte que les variables d'environnement soient accessibles directement comme des variables PHP normales. echo $HOME; /* Affiche la valeur de la variable d'environnement HOME, si celle-ci est affectée. */
9.9.5.4 Cas des points dans les noms de variables
Typiquement, PHP ne modifie pas les noms des variables lorsqu'elles sont passées à un script. Cependant, il faut noter que les points (.) ne sont pas autorisés dans les noms de variables PHP. Pour cette raison, jetez un oeil sur : $varname.ext; /* invalid variable name */
Dans ce cas, l'analyseur croit voir la variable nommée $varname, suivie par
l'opérateur de concaténation, et suivi encore par la chaîne non-guillemetée
(une chaîne sans guillemets, et qui n'a pas de signification particulière).
Visiblement, ce n'est pas ce qu'on attendait...
9.9.5.5 Détermination du type des variables
Parce que le PHP détermine le type des variables et les converties (généralement)
comme il faut, ce n'est pas toujours le type de variable que vous souhaitez.
PHP inclus des fonctions permettant de déterminer le type d'une variable.
Les fonctions gettype(), is_long(),
is_double(), is_string(),
is_array(), et is_object().
9.10 Les références
9.10.1 Qu'est ce qu'une référence?
En PHP, les références sont destinées à appeler le contenu d'une
variable avec un autre nom. Ce n'est pas comme en C : ici, les références
sont des alias dans la table des symboles. Le nom de la variable et
son contenu ont des noms différents, ce qui fait que l'on peut donner
plusieurs noms au même contenu. On peut faire l'analogie avec les
fichiers sous Unix, et leur nom de fichier : les noms des variables sont
les entrées dans un repertoire, tandis que le contenu de la variable est
le contenu même du fichier. Faire des références en PHP revient alors à faire
des liens sous Unix.
9.10.2 Que font les références
Les références vous permettent de faire pointer deux variables sur le même contenu. Par exemple, lorsque vous faites : $a =& $b
cela signifie que $a et $b
pointent sur la même variable.
Note :
$a et $b sont complètement égales ici :
Ce n'est pas $a qui pointe sur $b, ou
vice versa. C'est bien $a et $b
qui pointent sur le même contenu.
function foo (&$var) { $var++; } $a=5; foo ($a);
$a vaut 6. Cela provient du fait que dans la fonction
foo, la variable $var pointe sur le même
contenu que $a.
9.10.3 Ce que les références ne sont pas
Comme précisé ci dessus, les références ne sont pas des pointeurs. Cela signifie que le script suivant ne fera pas de à quoi on peut s'attendre : function foo (&$var) { $var =& $GLOBALS["baz"]; } foo($bar);
9.10.4 Retourner des références
Retourner des références est toujours utile lorsque vous voulez utiliser une fonction pour savoir à quoi est liée une variable. Lorsque vous retournez une variable par paramètre, utilisez le code suivant function &find_var ($param) { ...code... return $found_var; } $foo =& find_var ($bar); $foo->x = 2;
Dans cet exemple, la propriété de l'objet est retourné dans
find_var et lui sera affecté, et non pas à la copie,
comme cela sera le cas avec une syntaxe par référence.
9.10.5 Détruire une références
Lorsque vous détruiser une référence, vous ne faites que casser le lien entre le nom de la variable et son contenu. Cela ne signifie pas que le contenu est détruit. Par exemple, $a = 1; $b =& $a; unset ($a);
Cet exemple ne détruira pas $b, mais juste $a.
9.10.6 Repérer une référence
De nombreuses syntaxes de PHP sont implementées via le mécanisme de référence,
et tout ce qui a été vu concernant les liaisons entre variables s'applique à ces
syntaxe. Par exemple, le passage et le retour d'arguments par référence.
Quelques autres exemples de syntaxes :
9.10.6.1 global références
Lorsque vous déclarez une variable comme $var =& $GLOBALS["var"];
9.10.6.2 Références global
Lorsque vous déclarez une variable $var =& $GLOBALS["var"];
9.10.6.3 $this
Dans une méthode d'objet, $this est toujours une référence
sur l'objet courant.
10 Fonctions
10.1 Apache
10.1.1 apache_lookup_uri
class apache_lookup_uri (string filename) Effectue une requête partielle pour l'URI spécifiée. Cette requête permet de récupérer toutes les informations importantes à propos de la ressource concernée. Les propriétés de la classe renvoyée sont les suivantes :
10.1.2 apache_note
string apache_note (string note_name, string note_value )
apache_note() est une fonction spécifique au serveur Apache.
Cette fonction affecte ou renvoie la valeur de la variable contenue dans la table
notes d'Apache. Si la fonction est appelée avec un argument,
elle renvoie la valeur courante de la variable note_name. Si
la fonction est appelée avec deux arguments, la variable note_name
la valeur note_value et la fonction retournera la valeur
précédente de la variable note_name.
10.1.3 getallheaders
array getallheaders
Cette fonction renvoie un tableau associatif de tous les entêtes HTTP
correspondants à la requête courante.
Note :
Note: Vous pouvez récupérer la valeur d'une variable d'une CGI en la lisant
à partir des variables d'environnement, ce qui fonctionne aussi bien dans le cas
d'une installation en module ou en CGI. Utilisez la fonction
phpinfo() pour avoir une liste de toutes les variables
d'environnement disponibles.
$headers = getallheaders(); while (list($header, $value) = each($headers)) { echo "$header: $value<br>\n"; }
Cette exemple est un exemple d'affichage de toutes les entêtes de la requête
courante.
Note :
Note: La fonction getallheaders() ne fonctionne que si
PHP est installé comme module Apache.
10.1.4 virtual
int virtual (string filename)
virtual() est une fonction spécifique au serveur Apache.
Elle est équivalente à la directive "<!--#include virtual...-->"
lorsque vous utilisez le module include d'Apache. Cette fonction effectue une
sous-requête Apache. C'est très utile lorsque vous utilisez des scripts CGI,
des fichiers .shtml ou n'importe quel type de fichier qui doit être analysé
par le serveur Apache.
Il est à noter que lors de l'utilisation avec des scripts CGI, ces derniers
doivent générer une entête valide, c'est-à-dire, au minimum une entête
"Content-Type". Pour les fichiers PHP, il est conseillé d'utiliser les fonctions
include() et require().
virtual() ne peut pas être utilisé pour inclure un fichier
qui est lui même un fichier PHP.
10.2 Tableaux
10.2.1 array
array array
Retourne un tableau, créé à partir des paramètres fournis. Les paramètres peuvent
avoir un index, fourni sous la forme clé => valeur.
Note :
array() n'est pas une fonction standard,
elle existe simplement pour représenter littéralement des tableaux.
$fruits = array ( "fruits" => array("a"=>"orange", "b"=>"banane", "c"=>"pomme"), "numbres" => array(1, 2, 3, 4, 5, 6), "trous" => array("premier", 5 => "deuxième", "troisième") );
10.2.2 array_count_values
array array_count_values (array input)
array_count_values() retourne un tableau contenant
les valeurs du tableau input comme clés et leurs fréquence
input comme valeur.
$array = array(1, "bonjour", 1, "monde", "bonjour"); array_count_values($array); // retourne array(1=>2, "bonjour"=>2, "monde"=>1)
Note :
Cette fonction a été ajoutée dans PHP 4.0.
10.2.3 array_diff
array array_diff (array array1, array array2, array ... )
array_diff() retourne un tableau contenant toutes
les valeurs du tableau array1 qui ne sont dans
aucun des autres arguments. Les clés sont préservées.
$array1 = array ("a" => "vert", "rouge", "bleu"); $array2 = array ("b" => "vert", "jaune", "rouge"); $result = array_diff ($array1, $array2);
10.2.4 array_flip
array array_flip (array trans)
array_flip() retourne un tableau dont les clés sont les valeurs du précédent tableau, et les valeurs sont les clés
$trans = array_flip ($trans); $original = strtr ($str, $trans);
Note :
Cette fonction a été ajoutée dans PHP 4.0.
10.2.5 array_intersect
array array_intersect (array array1, array array2, array ... )
array_intersect() retourne un tableau contenant
toutes les valeurs de array1 qui sont présentes
dans tous les autres arguments. Les clés sont préservées.
$array1 = array ("a" => "vert", "rouge", "bleu"); $array2 = array ("b" => "vert", "jaune", "rouge"); $result = array_intersect ($array1, $array2);
10.2.6 array_keys
array array_keys (array input, mixed search_value )
array_keys() retourne les clés numériques et litérales du tableau
input.
$array = array(0 => 100, "couleur" => "rouge"); array_keys ($array); // retourne array (0, "couleur") $array = array(1, 100, 2, 100); array_keys ($array, 100); // retourne array (0, 2)
10.2.7 array_merge
array array_merge (array array1, array array2, ... )
array_merge() consolide les éléments de plusieurs tableaux
ensemble, en ajoutant les valeurs de l'un à la fin de l'autre. Le résultat est un tableau.
$array1 = array ("couleur" => "rouge", 2, 4); $array2 = array ("a", "b", "couleur" => "vert", "forme" => "trapézoÔde"); array_merge ($array1, $array2);Le résultat sera array("couleur" => "vert", 2, 4, "a", "b", "forme" => "trapézoÔde").
Note :
Cette fonction a été ajoutée dans PHP 4.0.
10.2.8 array_merge_recursive
array array_merge_recursive (array array1, array array2, array ... )
array_merge_recursive() consolide les éléments de plusieurs
tableaux, en ajoutant les valeurs à la suite les unes des autres. Le tableau
ainsi créé est retourné.
$ar1 = array ("couleur" => array ("favorie" => "rouge"), 5); $ar2 = array (10, "couleur" => array ("favorie" => "vert", "bleu")); $result = array_merge_recursive ($ar1, $ar2);
10.2.9 array_multisort
bool array_multisort (array ar1, mixed arg , mixed ... , array ... )
array_multisort() sert à trier plusieurs tableaux en
même temps, ou trier un tableau multidimensionnel suivant une ou plusieurs
de ses dimensions. L'intégrité des clés est conservée.
$ar1 = array ("10", 100, 100, "a"); $ar2 = array (1, 3, "2", 1); array_multisort ($ar1, $ar2);
$ar = array (array ("10", 100, 100, "a"), array (1, 3, "2", 1)); array_multisort ($ar[0], SORT_ASC, SORT_STRING, $ar[1], SORT_NUMERIC, SORT_DESC);
10.2.10 array_pad
array array_pad (array input, int pad_size, mixed pad_value)
array_pad() retourne une copie du tableau
input complété jusqu'à la taille de
pad_size avec la valeur
pad_value. si pad_size
est positif alors le tableau est complété à droite, si il est négatif, il est complété à gauche.
Si la valeurs absolue de pad_size est plus petite que
la taille du tableau input alors le tableau n'est pas complété.
$input = array (12, 10, 9); $result = array_pad ($input, 5, 0); // Le résultat est array (12, 10, 9, 0, 0) $result = array_pad ($input, -7, -1); // Le résultat est array (-1, -1, -1, -1, 12, 10, 9) $result = array_pad ($input, 2, "noop"); // pas complété
10.2.11 array_pop
mixed array_pop (array array)
array_pop()
array_pop() dépile et retourne le dernier élément du tableau array,
le raccourcissant d'un élément.
$stack = array ("orange", "pomme", "framboise"); $fruit = array_pop ($stack);Après ceci, $stack n'a plus que 2 éléments: "orange" et "pomme", tandis que $fruit contient "framboise".
10.2.12 array_push
int array_push (array array, mixed var, ... ) array_push() considère array comme une pile, et empile les variables passées en paramètres à la fin de array. La longueur du tableau array augmente d'autant. Cela a le même effet que : $array[] = $var;
repeté pour chaque var.
$stack = array (1, 2); array_push($stack, "+", 3);
Cet exemple fait que $stack a 4 éléments: 1, 2, "+",
et 3.
10.2.13 array_rand
mixed array_rand (array input, int num_req )
array_rand() est utile lors vous voulez choisir
une ou plusieurs valeurs au hasard dans un tableau. input
est un tableau, et num_req indique combien d'éléments
vous voulez choisir (par défaut, la fonction ne retourne qu'un
élément).
srand ((double) microtime() * 10000000); $input = array ("D'artagnan", "Athos", "Porthos", "Aramis", "Milady"); $rand_keys = array_rand ($input, 2); print $input[$rand_keys[0]]."\n"; print $input[$rand_keys[1]]."\n";
10.2.14 array_reverse
array array_reverse (array array)
array_reverse() prend un tableau
array et retourne un nouveau tableau qui contient les mêmes éléments
mais dans l'ordre inverse.
$input = array ("php", 4.0, array ("rouge", "vert")); $result = array_reverse ($input);
Au final, $result contient (array ("rouge", "vert"), 4.0, "php").
Note :
Cette fonction a été ajoutée dans PHP 4.0 Beta 3.
10.2.15 array_shift
mixed array_shift (array array)
array_shift()
extrait la première valeur d'un tableau et la retourne, en raccourcissant le tableau
d'un élément, et en déplacant tous les éléments vers le bas.
$args = array ("-v", "-f"); $opt = array_shift ($args);
Cet exemple aura pour résultat que $args ne contiendra plus que "-f", et $opt contient "-v".
10.2.16 array_slice
array array_slice (array array, int offset, int length )
array_slice() retourne une série d'élément du tableau
array commencant à l'offset offset et représentant
length éléments.
$input = array ("a", "b", "c", "d", "e"); $output = array_slice ($input, 2); // retourne "c", "d", et "e" $output = array_slice ($input, 2, -1); // retourne "c", "d" $output = array_slice ($input, -2, 1); // retourne "d" $output = array_slice ($input, 0, 3); // retourne "a", "b", et "c"
10.2.17 array_splice
array array_splice (array input, int offset, int length , array replacement )
array_splice()
supprime les éléments désignés par offset et
length du tableau input et les remplace
par les éléments du tableau replacement, si ce dernier est présent.
array_push($input, $x, $y) array_splice($input, count($input), 0, array($x, $y)) array_pop($input) array_splice($input, -1) array_shift($input) array_splice($input, 0, 1) array_unshift($input, $x, $y) array_splice($input, 0, 0, array($x, $y)) $a[$x] = $y array_splice($input, $x, 1, $y)
$input = array("red", "green", "blue", "yellow"); array_splice($input, 2); // $input est array("red", "green") array_splice($input, 1, -1); // $input est array("red", "yellow") array_splice($input, 1, count($input), "orange"); // $input est array("red", "orange") array_splice($input, -1, 1, array("black", "maroon")); // $input est array("red", "green", // "blue", "black", "maroon")
10.2.18 array_unique
array array_unique (array array)
array_unique() prend un tableau comme argument
array et retourne un tableau qui ne contient
plus aucun élément en double. Notez que les clés sont préservées.
$input = array ("a" => "vert", "rouge", "b" => "vert", "bleu", "rouge"); $result = array_unique ($input);
10.2.19 array_unshift
int array_unshift (array array, mixed var, ... )
array_unshift() ajoute les éléments passé en arguments au
début du tableau array. Notez que les éléments sont ajoutés
comme un tout, et qu'ils restent dans le même ordre.
$queue = array("p1", "p3"); array_unshift($queue, "p4", "p5", "p6");
Le résultat de cet exemple est que $queue aura 5 éléments, à savoirÆ: "p4", "p5", "p6", "p1", et "p3".
10.2.20 array_values
array array_values (array input)
array_values()retourne les valeurs d'un tableau input.
$array = array("taille" => "XL", "couleur" => "or"); array_values($array); // // retourne array("XL", "or")
Note :
Cette fonction a été ajoutée dans PHP 4.0.
10.2.21 array_walk
int array_walk (array arr, string func, mixed userdata)
Exécute la fonction func avec chaque élément du tableau arr.
Les éléments sont passés en tant que premier argument de la fonction func;
$fruits = array("d"=>"citron","a"=>"orange","b"=>"banane","c"=>"pomme"); function test_alter( $item1 ) { $item1 = 'bidon'; } function test_print( $item2 ) { echo "$item2<br>\n"; } array_walk( $fruits, 'test_print' ); array_walk( $fruits, 'test_alter' ); array_walk( $fruits, 'test_print' ); 10.2.22 arsort
void arsort (array array) Cette fonction trie un tableau de telle manière que la corrélation entre les index et les valeurs soient conservées. L'usage principal est lors de tri de tableaux associatifs oú l'ordre des éléments est important. arsort() example $fruits = array("d"=>"papaye","a"=>"orange","b"=>"banane","c"=>"ananas"); arsort ($fruits); for (reset ($fruits); $key = key ($fruits); next ($fruits)) { echo "fruits[$key] = ".$fruits[$key]."\n"; }
Cet exemple va afficher:
10.2.23 asort
void asort (array array) Cette fonction trie un tableau de telle manière que la corrélation entre les index et les valeurs soient conservées. L'usage principal est lors de tri de tableaux associatifs oú l'ordre des éléments est important. Exemple avec asort() $fruits = array("d"=>"papaye","a"=>"orange","b"=>"banane","c"=>"ananas"); asort($fruits); for(reset($fruits); $key = key($fruits); next($fruits)) { echo "fruits[$key] = ".$fruits[$key]."\n"; }
Cet exemple va afficher:
10.2.24 compact
array compact (string varname ) array varnames, ... |
compact() accepte différents paramètres. Les paramètres peuvent
être des variables contenant des chaînes, ou un tableau de chaîne, qui
peut contenir d'autres tableau de noms, que compact() traitera récursivement.
$ville = "San Francisco"; $etat = "CA"; $evenement = "SIGGRAPH"; $location_vars = array("ville", "etat"); $result = compact("evenement", $location_vars);Après cette opération, $result sera le tableau suivant : array(("evenement" => "SIGGRAPH", "ville" => "San Francisco", "etat" => "CA").
10.2.25 count
int count (mixed var)
Retourne le nombre d'élément dans var, qui est généralement
un tableau (et tout le reste n'aura qu'un élément).
10.2.26 current
mixed current (array array)
Chaque tableau entretien un pointeur interne, qui est initialisé lors
lorsque le premier élément est inséré dans le tableau.
10.2.27 each
array each (array array)
Retourne la paire (clé/valeur) courante du tableau array
et avance le pointeur de tableau. Cette paire est retournée dans un tableau
de 4 éléments, avec les clés 0, 1,
key, et
value. Les éléments 0 et
key
contiennent le nom de la clé et, et 1 and
value contienent la valeur.
$foo = array ("bob", "fred", "jussi", "jouni", "egon", "marliese"); $bar = each ($foo);$bar contient maintenant les paires suivantes:
$foo = array ("Robert" => "Bob", "Seppo" => "Sepi"); $bar = each ($foo); $bar contient maintenant les paires suivantes:
echo "Valeurs transmises par la méthode POST:<br>"; reset ($HTTP_POST_VARS); while (list ($key, $val) = each ($HTTP_POST_VARS)) { echo "$key => $val<br>"; }
10.2.28 end
end (array array)
end() déplace le pointeur interne du tableau array
jusqu'au dernier élément.
10.2.29 extract
void extract (array var_array, int extract_type , string prefix )
Cette fonction sert à exporter un tableau vers la table des symboles.
Elle prend un tableau associatif var_array et crée les variables
dont les noms sont les index de ce tableau, et leur affecte la valeur associée. Pour
chaque paire clé/valeur, cette fonction crée une variable,
avec les paramètres extract_type et prefix.
<php? /* Supposons que $var_array est un tableau retourné par wddx_deserialize */ $taille = "grand"; $var_array = array("couleur" => "bleu", "taille" => "moyen", "forme" => "sphere"); extract($var_array, EXTR_PREFIX_SAME, "wddx"); print "$couleur, $taille, $forme, $wddx_taille\n"; ?>
blue, large, sphere, medium
10.2.30 in_array
bool in_array (mixed needle, array haystack)
Recherche needle dans haystack et
retourne vrai si il s'y trouve, ou faux sinon.
$os = array("Mac", "NT", "Irix", "Linux"); if (in_array("Irix", $os)) print "Irix trouve";
Note :
Cette fonction a été ajoutée dans PHP 4.0.
10.2.31 key
mixed key (array array)
key() retourne l'index de la clé courante dans un tableau.
10.2.32 krsort
int krsort (array array) Trie un tableau en ordre inverse et suivant les clés, en maintenant la correspondance entre les clés et les valeurs. Cette fonction est pratique pour les tableaux associatifs. Exemple avec krsort() $fruits = array("d"=>"papaye","a"=>"orange","b"=>"banane","c"=>"ananas"); ksort($fruits); for(reset($fruits); $key = key($fruits); next($fruits)) { echo "fruits[$key] = ".$fruits[$key]."\n"; }
Cet exemple va afficher :
10.2.33 ksort
int ksort (array array) Trie un tableau suivant les clés, en maintenant la correspondance entre les clés et les valeurs. Cette fonction est pratique pour les tableaux associatifs. ksort() example $fruits = array("d"=>"papaye","a"=>"orange","b"=>"banane","c"=>"ananas"); ksort($fruits); for(reset($fruits); $key = key($fruits); next($fruits)) { echo "fruits[$key] = ".$fruits[$key]."\n"; }
Cet exemple va afficher :
10.2.34 list
void list Tout comme array(), ce n'est pas une véritable fonction, mais une construction syntaxique, qui permet d'assigner une série de variable en une seule ligne. Exemple avec list() <table> <tr> <th>Nom des emploies name</th> <th>Salaire</th> </tr> <?php $result = mysql($conn, "SELECT id, nom, salaire FROM employe"); while (list($id, $nom, $salaire) = mysql_fetch_row($result)) { print(" <tr>\n". " <td><a href=\"info.php3?id=$id\">$nom </a></td>\n". " <td>$salaire</td>\n". " </tr>\n"); } ?></table> 10.2.35 natsort
void natsort (array array)
Cette fonction implémente un algorithme de tri qui traite les chaînes
alphanumériques comme un être humain : c'est ce qui est appelé
l'"ordre naturel". Un exemple de la différence de traitement entre
un tel algorithme et un algorithme de tri de chaîne
(comme lorsqu'on utilise sort()) est illustré ci dessous :
$array1 = $array2 = array ("img12.png","img10.png","img2.png","img1.png"); sort($array1); echo "Tri Standard\n"; print_r($array1); natsort($array2); echo "\nTri en ordre naturel\n"; print_r($array2);
Tri Standard Array ( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png ) Tri en ordre naturel Array ( [3] => img1.png [2] => img2.png [1] => img10.png [0] => img12.png )
Pour plus d'informations, reportez vous à Martin Pool's Natural Order String Comparison.
10.2.36 natcasesort
void natcasesort (array array)
Cette fonction implémente un algorithme de tri qui traite les chaînes
alphanumériques comme un être humain : c'est ce qui est appelé
l'"ordre naturel".
10.2.37 next
mixed next (array array)
retourne l'élément suivant du tableau, ou
false si il n'y a plus d'éléments. Le pointeur de interne de tableau est avancé d'un élément.
10.2.38 pos
mixed pos (array array)
C'est une fonction alias de current().
10.2.39 prev
mixed prev (array array)
Repositionne le pointeur interne de tableau à la dernière place qu'il occupait,
ou bien retourne faux si il ne reste plus d'éléments.
Si le tableau contient des éléments vides, cette fonction retournera faux pour ces éléments aussi. Pour passer en revue tous les éléments, utilisez plutôt each().
10.2.40 range
array range (int low, int high)
range() range() retourne un tableau contenant tous les entiers depuis low jusqu'à high, inclus.
10.2.41 reset
mixed reset (array array)
reset() replace le pointeur de tableau array au premier élément.
10.2.42 rsort
void rsort (array array) Cette fonction effectue un trie en ordre décroissant (du plus grand au plus petit ) rsort() example $fruits = array("papaye","orange","banane","ananas"); rsort($fruits); for (reset($fruits); list($key,$value) = each($fruits); ) { echo "fruits[$key] = ", $value, "\n"; }
Cet exemple va afficher:
10.2.43 shuffle
void shuffle (array array) Cette fonction mélange les éléments d'un tableau. shuffle() example $numbers = range (1,20); srand (time()); shuffle ($numbers); while (list(, $number) = each ($numbers)) { echo "$number "; }
10.2.44 sizeof
int sizeof (array array)
Retourne le nombre d'élément d'un tableau.
10.2.45 sort
void sort (array array) Cette fonction trie le tableau array. Les éléments seront triés du plus petit au plus grand. sort() example $fruits = array("papaye","orange","banane","ananas"); sort($fruits); for(reset($fruits); $key = key($fruits); next($fruits)) { echo "fruits[$key] = ".$fruits[$key]."\n"; }
Cet exemple va afficher :
10.2.46 uasort
void uasort (array array, function cmp_function)
Cette fonction trie un tableau en conservant la correspondance entre les index et leurs valeurs. Cette fonction sert essentiellement lors de tri de tableaux associatifs oú l'ordre des éléments est significatif. La fonction de comparaison utilisée est définie par l'utilisateur.
10.2.47 uksort
void uksort (array array, function cmp_function) Cette fonction va trier les clés du tableau en utilisant une fonction définie par l'utilisateur. Si un tableau qui doit être trié avec un critère complexe, il est préférable d'utiliser cette fonction. uksort() example function mycompare($a, $b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; } $a = array(4 => "quatre", 3 => "trois", 20 => "vingt", 10 => "dix"); uksort($a, mycompare); while(list($key, $value) = each($a)) { echo "$key: $value\n"; }
Cet exemple affichera:
10.2.48 usort
void usort (array array, function cmp_function)
Cette fonction va trier un tableau avec ses valeurs, en utilisant une fonction définie par l'utilisateur. Si un tableau doit être trié avec un critère complexe, il est préférable d'utiliser cette méthode.
function cmp($a,$b) { if ($a == $b) return 0; return ($a > $b) ? -1 : 1; } $a = array(3,2,5,6,1); usort($a, cmp); while(list($key,$value) = each($a)) { echo "$key: $value\n"; }
Cet exemple affichera :
10.3 Aspell
Les fonctions Aspell vous permettent de vérifier l'orthographe d'un mot,
et d'offrir des suggestions de corrections. Plusieurs langues sont disponible, comme
l'allemand, le suédois et le danois.
10.3.1 aspell_new
int aspell_new (string master, string personal)
aspell_new() ouvre un nouveau dictionaire, et retourne un
identifiant de dictionnaire pour utilisation ultérieure dans les fonctions aspell.
$aspell_link=aspell_new("english");
10.3.2 aspell_check
boolean aspell_check (int dictionary_link, string word)
aspell_check() vérifie l'orthographe d'un mot et retourne TRUE
si l'orthographe est correcte, et FALSE sinon.
$aspell_link=aspell_new("english"); if (aspell_check($aspell_link,"testt")) { echo "L'orthographe est correcte."; } else { echo "Désolé, l'orthographe est incorrecte."; }
10.3.3 aspell_check-raw
boolean aspell_check_raw (int dictionary_link, string word)
aspell_check_raw() vérifie l'orthographe d'un mot sans en
changer la casse, et sans essayer de supprimer les espaces aux extrémités. Elle
retourne true si l'orthographe est bonne, et false sinon.
$aspell_link=aspell_new("english"); if (aspell_check_raw($aspell_link,"testt")) { echo "This is a valid spelling"; } else { echo "Sorry, wrong spelling"; }
10.3.4 aspell_suggest
array aspell_suggest (int dictionary_link, string word)
aspell_suggest() retourne un tableau contenant les orthographes
possibles d'un mot mal formé.
$aspell_link=aspell_new("english"); if (!aspell_check($aspell_link,"testt")) { $suggestions=aspell_suggest($aspell_link,"testt"); for($i=0; $i < count($suggestions); $i++) { echo "Orthographe envisageable : " . $suggestions[$i] . "<br>"; } }
10.4 Mathématiques sur de grands nombres
Ces fonctions ne sont disponibles que si l'option de configuration
--enable-bcmath a été activée lors de la
compilation.
10.4.1 bcadd
string bcadd (string left operand, string right operand, int scale )
Additionne left operand avec l'opérande
right operand et renvoie la somme sous forme de chaîne de
caractères. Le paramètre optionnel scale est utilisé pour
définir le nombre de chiffres après la virgule dans le résultat.
10.4.2 bccomp
int bccomp (string left operand, string right operand, int scale )
Compare l'opérande left operand avec l'opérande
right operand et renvoie le résultat sous forme de valeur
numérique (integer). Le paramètre optionnel scale est
utilisé pour définir le nombre de chiffres après la virgule utilisés lors de la
comparaison. Le résultat est 0 si les deux opérandes sont égales. Si l'opérande
left operand est plus grande que l'opérande
right operand, le résultat est 1.
Si l'opérande left operand est plus petite que l'opérande
right operand, le résultat est -1.
10.4.3 bcdiv
string bcdiv (string left operand, string right operand, int scale )
Divise l'opérande left operand par l'opérande
right operand et renvoie le résultat. Le paramètre optionnel
scale définit le nombre de chiffres après la virgule dans
le résultat.
10.4.4 bcmod
string bcmod (string left operand, string modulus)
Retourne le reste de la division entre left operand en
utilisant modulus.
10.4.5 bcmul
string bcmul (string left operand, string right operand, int scale )
Multiplie l'opérande left operand par l'opérande
right operand et renvoie le résultat. Le paramètre
optionnel scale définit le nombre de chiffres après la
virgule dans le résultat.
10.4.6 bcpow
string bcpow (string x, string y, int scale )
Elève x à la puissance y.
Le paramètre optionnel scale définit le nombre de chiffres
après la virgule dans le résultat.
10.4.7 bcscale
string bcscale (int scale)
Cette fonction définit la précision par défaut pour toutes les fonctions
mathématiques sur des nombres de taille arbitraire qui suivent et qui omettent
le paramètre scale.
10.4.8 bcsqrt
string bcsqrt (string operand, int scale)
Renvoie la racine carrée de l'opérande operand.
Le paramètre optionnel scale définit le nombre
de chiffres après la virgule dans le résultat.
10.4.9 bcsub
string bcsub (string left operand, string right operand, int scale )
Soustrait l'opérande right operand de l'opérande
left operand et renvoie le résultat sous forme de chaîne
de caractères. Le paramètre optionnel scale définit le
nombre de chiffres après la virgule dans le résultat.
10.5 Calendrier
Les fonctions de calendrier ne sont disponibles que si l'extension calendrier
(calendar) a été compilée. Elle est située dans dl/calendar. Lisez le fichier
dl/README pour plus de détails.
10.5.1 JDToGregorian
string jdtogregorian (int julianday)
Converti le nombre de jours du calendrier Julien en une chaîne contenant une
date du calendrier grégorien, au format "mois/jour/année".
10.5.2 GregorianToJD
int gregoriantojd (int month, int day, int year)
Intervalle de validité pour le calendrier grégorien : 4714 avant JC à 9999
après JC.A.D.
<?php $jd = GregorianToJD(10,11,1970); echo("$jd\n"); $gregorian = JDToGregorian($jd); echo("$gregorian\n"); ?>
10.5.3 JDToJulian
string jdtojulian (int julianday)
Converti le nombre de jours du calendrier Julien en une chaîne contenant
la date du calendrier Julien, au format "mois/jour/année".
10.5.4 JulianToJD
int juliantojd (int month, int day, int year)
Intervalle de validité du calendrier Julien : 4713 avant JC à 9999 après J.C..
10.5.5 JDToJewish
string jdtojewish (int julianday)
Converti le nombre de jours du calendrier julien en date du calendrier juif.
10.5.6 JewishToJD
int jewishtojd (int month, int day, int year)
Bien qu'il soit possible de manipuler des dates à partir de l'an 1 (3761
avant JC), une telle utilisation a peu de sens.
10.5.7 JDToFrench
string jdtofrench (int month, int day, int year)
Converti le nombre de jours du calendrier julien en date du calendrier
français républicain.
10.5.8 FrenchToJD
int frenchtojd (int month, int day, int year)
Converti une date du calendrier français républicain en nombre de jour du
calendrier julien.
10.5.9 JDMonthName
string jdmonthname (int julianday, int mode) Retourne une chaîne contenant le nom du mois. mode indique de quel calendrier dépend ce mois, et quel type de nom doit être retourné.
10.5.10 JDDayOfWeek
mixed jddayofweek (int julianday, int mode) Retourne le numéro du jour de la semaine. Peut retourner une chaîne ou un entier, en fonction du mode.
10.5.11 easter_date
int easter_date (int year)
Retourne un timestamp UNIX pour Pâques, à minuit, pour une année donnée.
Si l'année n'est pas précisée, c'est l'année en cours qui est utilisée.
echo date( "M-d-Y", easter_date(1999) ); /* "04 avril 1999" */ echo date( "M-d-Y", easter_date(2000) ); /* "23 avril 2000" */ echo date( "M-d-Y", easter_date(2001) ); /* "15 avril 2001" */
10.5.12 easter_days
int easter_days (int year)
Retourne le nombre de jour entre le 21 Mars et Pâques, pour une année donnée.
Si l'année n'est pas précisée, l'année en cours est utilisée par défaut.
echo easter_days(1999); /* 14, i.e. 4 Avril */ echo easter_days(1492); /* 32, i.e. 22 Avril */ echo easter_days(1913); /* 2, i.e. 23 Mars */
10.5.13 unixtojd
int unixtojd (int timestamp )
Retourne le jour Julien du timestamp UNIX timestamp
(nombre de secondes depuis 1.1.1970), ou pour le jour courant si
timestamp n'est pas fourni.
10.5.14 jdtounix
int jdtounix (int jday)
Cette fonction retourne une timestamp UNIX correspondant au jour
Julien jday ou false si jday
n'est pas dans l'époque UNIX (années grégorien entre 1970 et 2037 ou 2440588
<= jday <= 2465342 )
10.6 CCVS
Ces fonctions permettent d'accéder directement à CCVS depuis un script
PHP. CCVS est la solution de RedHat
au problème de l'intermédiaire ("middle-man") lors de l'utilisation de
cartes de crédits. Elles vous permettent de vous adresser directement
aux institutions de cartes de crédits, via votre "*nix box" (NDtraducteur : ??)
et un modem. En utilisant le module CCVS de PHP, vous pouvez directement
traiter les cartes de crédits depuis vos scripts PHP. Les explications suivantes
vous éclaireront sur le processus à suivre.
10.7 Classe/Objet
10.7.1 call_user_method
mixed call_user_method (string method_name , object obj , mixed parameter , mixed ... ) Appelle la méthode method_name de l'objet obj. Un exemple d'utilisation est présenté ci dessous : on y définit une classe, on l'instancie et on utilise call_user_method() pour appeler indirectement print_info. <?php class Pays { var $NAME; var $TLD; function Pays($name, $tld) { $this->NAME = $name; $this->TLD = $tld; } function print_info($prestr="") { echo $prestr."Pays: ".$this->NAME."\n"; echo $prestr."Nom de super domaine: ".$this->TLD."\n"; } } $unPays = new Pays("Peru","pe"); echo "* Appel direct de la méthode objet \n"; $cntry->print_info(); echo "\n* Appel indirect de la méthode objet \n"; call_user_method ("print_info", $cntry, "\t"); ?>
10.7.2 get_class_methods
array get_class_methods (string class_name)
get_class_methods() retourne un tableau contenant les
noms des méthodes de la classe class_name.
10.7.3 class_exists
bool class_exists (string class_name)
class_exists() retourne TRUE si la classe
class_name a bien été définie, et FALSE
sinon.
10.7.4 get_class
string get_class (object obj)
This function returns the name of the class of which the
object obj is an instance.
10.7.5 get_declared_classes
array get_declared_classes (void)
Cette fonction retourne un tableau contenant les noms des classes déjà définies
dans le script courant.
10.7.6 get_class_vars
array get_class_vars (string class_name)
get_class_vars() retourne un tableau contenant les
valeurs par défaut des attributs de la classe class_name.
10.7.7 get_object_vars
array get_object_vars (object obj)
get_object_vars() retourne un tableau contenant les
valeurs des attributs de la classe class_name.
10.7.8 get_parent_class
string get_parent_class (object obj)
get_parent_class() retourne le nom de la classe
mère dont l'objet obj est une instance.
10.7.9 is_subclass_of
bool is_subclass_of (object obj, string superclass)
is_subclass_of() retourne TRUE si
obj est une sous classe de
superclass, et FALSE sinon.
10.7.10 method_exists
bool method_exists (object object, string method_name)
method_exists() retourne TRUE si la méthode
method_name a été définie pour la classe
object, et sinon, retourne FALSE.
10.8 Support COM (Windows)
Ces fonctions ne sont disponibles que sous les versions Windows de PHP.
Elles ont été ajoutées dans PHP 4.
10.8.1 com_load
string com_load (string module name, string server name )
10.8.2 com_invoke
mixed com_invoke (resource object, string function_name, mixed paramètres de fonction, ... )
10.8.3 com_propget
mixed com_propget (resource object, string property)
10.8.4 com_get
mixed com_get (resource object, string property)
10.8.5 com_propput
void com_propput (resource object, string property, mixed value)
10.8.6 com_propset
void com_propset (resource object, string property, mixed value)
Cette fonction est un alias de com_propput().
10.8.7 com_set
void com_set (resource object, string property, mixed value)
Cette fonction est un alias de com_set().
10.9 ClibPDF
ClibPDF vous permet de créer des documents PDF avec PHP. Cette librairie est
disponible à FastIO mais n'est pas
gratuite. Vous devez lire la licence avant de l'utiliser. Si vous ne pouvez pas
accepter la licence, essayez plutôt pdflib de Thomas Merz, qui est aussi très
puissante.
Les fonctionnalités de ClibPDF et ses API sont très similaires à celles de Thomas
Merz's pdflib mais, selon FastIO, ClibPDF est plus rapide, et crée des documents
plus compacts.
Cela peut avoir changé depuis la version 2.0 de pdflib. Un test de vitesse
(avec pdfclock.c issue des exemples de pdflib 2.0 transformé en script PHP) ne
montre aucune différence de vitesse. La taille des fichiers est similaire si la
compression n'est pas utilisée. Il vaut mieux alors essayer les deux, et choisir
celui qui vous convient le mieux.
<?php $cpdf = cpdf_open(0); cpdf_page_init($cpdf, 1, 0, 595, 842); cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1"); cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding"); cpdf_set_text_rendering($cpdf, 1); cpdf_text($cpdf, "Times Roman outlined", 50, 750); cpdf_moveto($cpdf, 50, 740); cpdf_lineto($cpdf, 330, 740); cpdf_stroke($cpdf); cpdf_finalize($cpdf); Header("Content-type: application/pdf"); cpdf_output_buffer($cpdf); cpdf_close($cpdf); ?>
La distribution pdflib contient un exemple plus complet, qui crée des séries
de pages avec une horloge. Voici cet exemple converti en script PHP qui utilise
l'extension ClibPDF :
<?php $radius = 200; $margin = 20; $pagecount = 40; $pdf = cpdf_open(0); cpdf_set_creator($pdf, "pdf_clock.php3"); cpdf_set_title($pdf, "Analog Clock"); while($pagecount-- > 0) { cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0); cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0); /* wipe */ cpdf_translate($pdf, $radius + $margin, $radius + $margin); cpdf_save($pdf); cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0); /* minute strokes */ cpdf_setlinewidth($pdf, 2.0); for ($alpha = 0; $alpha < 360; $alpha += 6) { cpdf_rotate($pdf, 6.0); cpdf_moveto($pdf, $radius, 0.0); cpdf_lineto($pdf, $radius-$margin/3, 0.0); cpdf_stroke($pdf); } cpdf_restore($pdf); cpdf_save($pdf); /* 5 minute strokes */ cpdf_setlinewidth($pdf, 3.0); for ($alpha = 0; $alpha < 360; $alpha += 30) { cpdf_rotate($pdf, 30.0); cpdf_moveto($pdf, $radius, 0.0); cpdf_lineto($pdf, $radius-$margin, 0.0); cpdf_stroke($pdf); } $ltime = getdate(); /* draw hour hand */ cpdf_save($pdf); cpdf_rotate($pdf, -(($ltime['minutes']/60.0) + $ltime['hours'] - 3.0) * 30.0); cpdf_moveto($pdf, -$radius/10, -$radius/20); cpdf_lineto($pdf, $radius/2, 0.0); cpdf_lineto($pdf, -$radius/10, $radius/20); cpdf_closepath($pdf); cpdf_fill($pdf); cpdf_restore($pdf); /* draw minute hand */ cpdf_save($pdf); cpdf_rotate($pdf, -(($ltime['seconds']/60.0) + $ltime['minutes'] - 15.0) * 6.0); cpdf_moveto($pdf, -$radius/10, -$radius/20); cpdf_lineto($pdf, $radius * 0.8, 0.0); cpdf_lineto($pdf, -$radius/10, $radius/20); cpdf_closepath($pdf); cpdf_fill($pdf); cpdf_restore($pdf); /* draw second hand */ cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0); cpdf_setlinewidth($pdf, 2); cpdf_save($pdf); cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0)); cpdf_moveto($pdf, -$radius/5, 0.0); cpdf_lineto($pdf, $radius, 0.0); cpdf_stroke($pdf); cpdf_restore($pdf); /* draw little circle at center */ cpdf_circle($pdf, 0, 0, $radius/30); cpdf_fill($pdf); cpdf_restore($pdf); cpdf_finalize_page($pdf, $pagecount+1); } cpdf_finalize($pdf); Header("Content-type: application/pdf"); cpdf_output_buffer($pdf); cpdf_close($pdf); ?> 10.9.1 cpdf_global_set_document_limits
void cpdf_global_set_document_limits (int maxpages, int maxfonts, int maximages, int maxannotations, int maxobjects)
cpdf_global_set_document_limits() permet de fixer plusieurs
limites au document PDF. Cette fonction doit être appelé avant
cpdf_open() pour être effective. Elle fixe les limites de tous
les documents ouverts après.
10.9.2 cpdf_set_creator
void cpdf_set_creator (string creator)
cpdf_set_creator() fixe le créateur d'un document PDF.
10.9.3 cpdf_set_title
void cpdf_set_title (string title)
cpdf_set_title() fixe le titre d'un document PDF.
10.9.4 cpdf_set_subject
void cpdf_set_subject (string subject)
cpdf_set_subject() fixe le sujet d'un document PDF.
10.9.5 cpdf_set_keywords
void cpdf_set_keywords (string keywords)
cpdf_set_keywords() fixe les mot clés d'un document PDF.
10.9.6 cpdf_open
int cpdf_open (int compression, string filename)
cpdf_open() ouvre un nouveau document PDF. Le premier paramètre
active ou pas la compression, suivant qu'il vaut 0 ou 1. Le deuxième paramètre,
optionnel, choisit le fichier de destination du document. Si il est omis, le
document sera écrit en mémoire, et pourra être écrit dans un fichier avec
cpdf_save_to_file() ou envoyé à l'affichage avec
cpdf_output_buffer().
Note :
La valeur retournée sera nécessaire pour les autres fonctions de ClibPDF comme
premier paramètre.
10.9.7 cpdf_close
void cpdf_close (int pdf document)
cpdf_close() ferme un fichier PDF. Ce doit être la dernière
fonction appelée, et elle apparaît même après cpdf_finalize(),
cpdf_output_buffer() et cpdf_save_to_file().
10.9.8 cpdf_page_init
void cpdf_page_init (int pdf document, int page number, int orientation, double height, double width, double unit)
cpdf_page_init() commence une nouvelle page, avec la hauteur
height et la largeur width.
La page a le numéro page number et l'orientation
orientation. orientation
vaut 0 pour portrait et 1 pour paysage. Le dernier paramètre, optionnel,
unit, fixe l'unité pour le système de coordonnées.
Cette valeur doit être un nombre de points postscript, par unité. Etant donné que
un pouce (inch) vaut 72 points, une valeur de 72 vaudra un pouce (inch). Par
défaut, cette valeur vaut 72.
10.9.9 cpdf_finalize_page
void cpdf_finalize_page (int pdf document, int page number)
cpdf_finalize_page() termine la page de numéro
page number.
Cette fonction fait que qu'une sauvegarde mémoire. Les pages terminées prennent
moins de place, mais ne peuvent plus être modifiées.
10.9.10 cpdf_finalize
void cpdf_finalize (int pdf document)
cpdf_finalize() termine un document. Vous devez toujours
appeler cpdf_close() après.
10.9.11 cpdf_output_buffer
void cpdf_output_buffer (int pdf document)
cpdf_output_buffer() envoie le document PDF dans un buffer
mémoire de stdout. Le document doit avoir été créé en mémoire, ce qui est le cas
si cpdf_open() a été appelée dans paramètre de nom de fichier.
10.9.12 cpdf_save_to_file
void cpdf_save_to_file (int pdf document, string filename)
cpdf_save_to_file() 'crit un document PDF dans un fichier,
si il a été créé en mémoire. Cette fonction n'est pas nécessaire si un
nom de fichier a été fourni lors de l'appel à cpdf_open().
10.9.13 cpdf_set_current_page
void cpdf_set_current_page (int pdf document, int page number)
cpdf_set_current_page() fixe la page courante, oú toutes les
prochaînes opérations vont avoir lieu. On peut changer de page jusqu'à ce qu'une
page soit terminée avec cpdf_finalize_page().
10.9.14 cpdf_begin_text
void cpdf_begin_text (int pdf document) cpdf_begin_text() démarre une section de texte. Elle doit être terminée avec cpdf_end_text(). Affichage de texte <?php cpdf_begin_text($pdf); cpdf_set_font($pdf, 16, "Helvetica", "WinAnsiEncoding"); cpdf_text($pdf, 100, 100, "Some text"); cpdf_end_text($pdf) ?>
10.9.15 cpdf_end_text
void cpdf_end_text (int pdf document) cpdf_end_text() termine une section de texte, commencée avec cpdf_begin_text(). Affichage de texte <?php cpdf_begin_text($pdf); cpdf_set_font($pdf, 16, "Helvetica", "WinAnsiEncoding"); cpdf_text($pdf, 100, 100, "Some text"); cpdf_end_text($pdf) ?>
10.9.16 cpdf_show
void cpdf_show (int pdf document, string text)
cpdf_show() imprime la chaîne text, à
la position courante.
10.9.17 cpdf_show_xy
void cpdf_show_xy (int pdf document, string text, double x-koor, double y-koor, int mode)
cpdf_show_xy() imprime la chaîne text,
à la position de coordonnées (x-koor,
y-koor). Le dernier paramètre optionnel est une unité de
longueur. Si il prend la valeur de 0 (ou si il est omis), c'est la valeur par
défaut (72) qui est utilisé.
Note :
The function cpdf_show_xy() est identique à
cpdf_text() sans les options.
10.9.18 cpdf_text
void cpdf_text (int pdf document, string text, double x-koor, double y-koor, int mode, double orientation, int alignmode)
cpdf_text() imprime le text text à la
position de coordonnées (x-koor,
y-koor). Le paramètre mode est une
unité de longueur. Si il prend la valeur de 0 (ou si il est omis), c'est la
valeur par défaut (72) qui est utilisé.
10.9.19 cpdf_set_font
void cpdf_set_font (int pdf document, string font name, double size, string encoding)
cpdf_set_font() Selectionne la police courante, sa taille,
et l'encodage. Actuellement, seules les polices postscript sont supportées.
Le dernier paramètre encoding peut prendre les valeurs
suivantes : "MacRomanEncoding", "MacExpertEncoding", "WinAnsiEncoding",
et "NULL". "NULL" signifie qu'il faut utiliser l'encodage par défaut. Reportez vous
à la doc de ClibPDF, pour plus d'informations, notamment sur les polices
asiatiques.
10.9.20 cpdf_set_leading
void cpdf_set_leading (int pdf document, double distance)
cpdf_set_leading() fixe la distance entre deux lignes.
Cela servira si le texte est affiché par cpdf_continue_text().
10.9.21 cpdf_set_text_rendering
void cpdf_set_text_rendering (int pdf document, int mode)
cpdf_set_text_rendering() détermines le rendu du texte.
Les valeurs possibles pour mode sont :
0=texte plein, 1=texte stroke, 2=texte plein et stroke, 3=invisible,
4=texte plein et ajouté au chemin, 5=texte stroke et ajouté au chemin,
6=texte plein et stroke et ajouté au chemin, 7=et ajouté au chemin.
10.9.22 cpdf_set_horiz_scaling
void cpdf_set_horiz_scaling (int pdf document, double scale)
cpdf_set_horiz_scaling() fixe l'échelle horizontale du
texte à scale %.
10.9.23 cpdf_set_text_rise
void cpdf_set_text_rise (int pdf document, double value)
cpdf_set_text_rise() fixe l'élévation du texte à
value unités.
10.9.24 cpdf_set_text_matrix
void cpdf_set_text_matrix (int pdf document, array matrix)
cpdf_set_text_matrix() fixe la matrice du texte, qui décrit
la transformation appliquée à police.
10.9.25 cpdf_set_text_pos
void cpdf_set_text_pos (int pdf document, double x-koor, double y-koor, int mode)
cpdf_set_text_pos() Fixe la position du texte pour le
prochain appel à cpdf_show().
10.9.26 cpdf_set_char_spacing
void cpdf_set_char_spacing (int pdf document, double space)
cpdf_set_char_spacing() fixe l'espacement des caractères.
10.9.27 cpdf_set_word_spacing
void cpdf_set_word_spacing (int pdf document, double space)
cpdf_set_word_spacing() fixe l'espacement des caractères.
10.9.28 cpdf_continue_text
void cpdf_continue_text (int pdf document, string text)
cpdf_continue_text() imprime le texte
text à la ligne suivante.
10.9.29 cpdf_stringwidth
double cpdf_stringwidth (int pdf document, string text)
cpdf_stringwidth() retourne la taille de la chaîne
text. Une police doit avoir déjà été choisie.
10.9.30 cpdf_save
void cpdf_save (int pdf document)
cpdf_save() sauve l'environnement courant. Cette fonction
est similaire à la commande postscript gsave. Très pratique quand vous devez
faire des translations et rotations sur un objet, mais sans affecter les autres.
10.9.31 cpdf_restore
void cpdf_restore (int pdf document) cpdf_restore() restaure l'environnement sauvé par cpdf_save(). Cette fonction est similaire à la commande postscript grestore. Très pratique quand vous devez faire des translations et rotations sur un objet, mais sans affecter les autres. Sauver/Restaurer <?php cpdf_save($pdf); // plein de transformations, translations, ... cpdf_restore($pdf) ?>
10.9.32 cpdf_translate
void cpdf_translate (int pdf document, double x-koor, double y-koor, int mode)
cpdf_translate() modifie l'origine du système de coordonées
en placant l'origine aux coordonnées (x-koor,
y-koor).
10.9.33 cpdf_scale
void cpdf_scale (int pdf document, double x-scale, double y-scale)
cpdf_scale() modifie l'echelle dans les deux direction.
10.9.34 cpdf_rotate
void cpdf_rotate (int pdf document, double angle)
cpdf_rotate() effectue une rotation, d'un angle de
angle degrés.
10.9.35 cpdf_setflat
void cpdf_setflat (int pdf document, double value)
cpdf_setflat() fixe la platitude (flatness),
entre 0 et 100.
10.9.36 cpdf_setlinejoin
void cpdf_setlinejoin (int pdf document, long value)
cpdf_setlinejoin() fixe le paramètre linejoin à une valeur
entre 0 et 2. 0 = miter, 1 = round, 2 = bevel. 10.9.37 cpdf_setlinecap
void cpdf_setlinecap (int pdf document, int value)
cpdf_setlinecap() fixe le paramètre linecap
à une valeur entre 0 et 2. 0 = butt end, 1 = round,
2 = projecting square.
10.9.38 cpdf_setmiterlimit
void cpdf_setmiterlimit (int pdf document, double value)
cpdf_setmiterlimit() Fixe le paramètre miter limit
à une valeur supérieure ou égale à 1.
10.9.39 cpdf_setlinewidth
void cpdf_setlinewidth (int pdf document, double width)
cpdf_setlinewidth()Fixe la largeur de ligne à la valeur de
width.
10.9.40 cpdf_setdash
void cpdf_setdash (int pdf document, double white, double black)
cpdf_setdash() fixe le motif de pointillé à
white unité de blanc et black unités
de noir. Si les deux sont à 0, une ligne pleine est affichée. 10.9.41 cpdf_newpath
void cpdf_newpath (int pdf_document )
cpdf_newpath() initie un nouveau chemin dans
le document pdf_document.
10.9.42 cpdf_moveto
void cpdf_moveto (int pdf document, double x-koor, double y-koor, int mode)
cpdf_moveto() fixe le point courant aux coordonnées
(x-koor, y-koor).
10.9.43 cpdf_rmoveto
void cpdf_rmoveto (int pdf document, double x-koor, double y-koor, int mode)
cpdf_rmoveto() Fixe le point courant aux coordonnées
(x-koor, y-koor), relativement.
10.9.44 cpdf_curveto
void cpdf_curveto (int pdf document, double x1, double y1, double x2, double y2, double x3, double y3, int mode)
cpdf_curveto() dessine une courbe de Bezier, entre le point
courant et le point (x3, y3), en
utilisant les points de contrôle
(x1, y1) et
(x2, y2).
10.9.45 cpdf_lineto
void cpdf_lineto (int pdf document, double x-koor, double y-koor, int mode)
cpdf_lineto() dessine une ligne entre le point courant et
le point de coordonnées (x-koor, y-koor).
10.9.46 cpdf_rlineto
void cpdf_rlineto (int pdf document, double x-koor, double y-koor, int mode)
cpdf_rlineto() dessine une ligne entre le point courant
et le point de coordonnées relatives (x-koor, y-koor).
10.9.47 cpdf_circle
void cpdf_circle (int pdf document, double x-koor, double y-koor, double radius, int mode)
cpdf_circle() dessine un cercle de centre
(x-koor, y-koor)
et de rayon radius.
10.9.48 cpdf_arc
void cpdf_arc (int pdf document, double x-koor, double y-koor, double radius, double start, double end, int mode)
cpdf_arc() Dessine un arc de cercle, dont le centre est au
point (x-koor, y-koor)
et l'angle est radius, commencant à l'angle
start et finissant à l'angle end.
10.9.49 cpdf_rect
void cpdf_rect (int pdf document, double x-koor, double y-koor, double width, double height, int mode)
cpdf_rect() Dessine un rectangle dont le coin inférieur droit
est au point (x-koor, y-koor).
La largeur est width.
La hauteur estheight.
10.9.50 cpdf_closepath
void cpdf_closepath (int pdf document)
cpdf_closepath() ferme le chemin courant.
10.9.51 cpdf_stroke
void cpdf_stroke (int pdf document)
cpdf_stroke() dessine une ligne le long du chemin.
10.9.52 cpdf_closepath_stroke
void cpdf_closepath_stroke (int pdf document)
cpdf_closepath_stroke() est une combinaison de
cpdf_closepath() et cpdf_stroke().
10.9.53 cpdf_fill
void cpdf_fill (int pdf document)
cpdf_fill() rempli l'intérieur du chemin courant
avec la couleur courante.
10.9.54 cpdf_fill_stroke
void cpdf_fill_stroke (int pdf document)
cpdf_fill_stroke() remplis l'intérieur du chemin avec la
couleur courante, et dessine le chemin.
10.9.55 cpdf_closepath_fill_stroke
void cpdf_closepath_fill_stroke (int pdf document)
cpdf_closepath_fill_stroke() remplis le chemin, dessine le
bord et ferme le chemin.
10.9.56 cpdf_clip
void cpdf_clip (int pdf document)
cpdf_clip() aligne les dessins sur le chemin courant.
10.9.57 cpdf_setgray_fill
void cpdf_setgray_fill (int pdf document, double value)
cpdf_setgray_fill() Choisit un niveau de gris comme couleur
de remplissage.
10.9.58 cpdf_setgray_stroke
void cpdf_setgray_stroke (int pdf document, double gray value)
cpdf_setgray_stroke() choisit un niveau de gris comme couleur
de dessin.
10.9.59 cpdf_setgray
void cpdf_setgray (int pdf document, double gray value)
cpdf_setgray_stroke() choisit un niveau de gris comme couleur
de dessin et de remplissage.
10.9.60 cpdf_setrgbcolor_fill
void cpdf_setrgbcolor_fill (int pdf document, double red value, double green value, double blue value)
cpdf_setrgbcolor_fill() choisit une couleur rgb comme couleur
de remplissage.
10.9.61 cpdf_setrgbcolor_stroke
void cpdf_setrgbcolor_stroke (int pdf document, double red value, double green value, double blue value)
cpdf_setrgbcolor_stroke() choisit une couleur rgb comme
couleur de dessin.
10.9.62 cpdf_setrgbcolor
void cpdf_setrgbcolor (int pdf document, double red value, double green value, double blue value)
cpdf_setrgbcolor_stroke() choisit une couleur rgb comme
couleur de dessin et de remplissage.
10.9.63 cpdf_add_outline
void cpdf_add_outline (int pdf document, string text) cpdf_add_outline() ajoute un signet à la page courante, avec le texte text qui pointe sur la page courante. Ajouter une mise en relief <?php $cpdf = cpdf_open(0); cpdf_page_init($cpdf, 1, 0, 595, 842); cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1"); // ... // quelques dessin // ... cpdf_finalize($cpdf); Header("Content-type: application/pdf"); cpdf_output_buffer($cpdf); cpdf_close($cpdf); ?>
10.9.64 cpdf_set_page_animation
void cpdf_set_page_animation (int pdf document, int transition, double duration)
cpdf_set_page_animation() Fixe l'animation de la transition
entre les pages.
10.9.65 cpdf_import_jpeg
int cpdf_import_jpeg (int pdf document, string file name, double x-koor, double y-koor, double angle, double width, double height, double x-scale, double y-scale, int mode)
cpdf_import_jpeg() ouvre une image JPG, enregistré dans
le fichier file name. Le format de l'image doit être JPEG.
L'image est placée dans la page courante, aux coordonnées
(x-koor, y-koor).
L'image subira une rotation d'un angle de angle degrés.
10.9.66 cpdf_place_inline_image
void cpdf_place_inline_image (int pdf document, int image, double x-koor, double y-koor, double angle, double width, double height, int mode)
cpdf_place_inline_image() places une image créée par un
script PHP, dans la page, à la position
(x-koor, y-koor).
L'image peut être mise à l'échelle, en même temps.
10.9.67 cpdf_add_annotation
void cpdf_add_annotation (int pdf document, double llx, double lly, double urx, double ury, string title, string content, int mode)
cpdf_add_annotation() ajoute une note, dont le coin inférieur
droit est (llx, lly) et le coin
supérieur droit est (urx, ury).
10.10 CURL
PHP supporte libcurl, une librairie créée par Daniel Stenberg, qui vous
permet de vous connecter de commniquer avec de nombreux serveurs, grâce à
de nombreux protocoles. libcurl supporte actuellement les protocoles suivants :
http, https, ftp, gopher, telnet, dict, file, et ldap. libcurl supporte aussi
les certificats HTTPS, les POST HTTP, PUT HTTP, le chargement par FTP
(ce qui peut être fait par l'extension FTP), les chargement par formulaire
HTTP, les proxies, les cookies et l'autentification par mot de passe et
nom de compte.
<?php $ch = curl_init ("http://www.php.net/"); $fp = fopen ("php_homepage.txt", "w"); curl_setopt ($ch, CURLOPT_INFILE, $fp); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_exec ($ch); curl_close ($ch); fclose ($fp); ?>
10.10.1 curl_init
int curl_init (string url ) curl_init() initialise une nouvelle session et retourne un identifiant de session CURL, à utiliser avec les fonctions curl_setopt(), curl_exec(), et curl_close(). Si le paramètre optionnel url est fourni, alors CURLOPT_URL prendra cette valeur. Vous pouvez manuellement fixer cette valeur avec la fonction curl_setopt(). Initialiser une sessions CURL et récupèration d'une page web. Initialiser une sessions CURL et récupèration d'une page web. <?php $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "http://www.zend.com/"); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_exec ($ch); curl_close ($ch); ?>
10.10.2 curl_setopt
bool curl_setopt (int ch , string option , mixed value )
curl_setopt() fixe les options de transfert de la
session CURL identifiée par ch.
option est le nom de l'option à fixer,
et value est sa valeur.
10.10.3 curl_exec
bool curl_exec (int ch )
Cette fonction doit être appelée après l'initialisation et le paramètrage
d'une session CURL. Son but est simplement d'éxécuter la session
ch.
10.10.4 curl_close
void curl_close (int ch )
Cette fonction ferme une session CURL et libère toutes les ressources
reservées. L'identifiant CURL, ch, est aussi effacé.
10.10.5 curl_version
string curl_version
curl_version() retourne une chaîne avec la version
courante de la librairie CURL.
10.11 Cybercash (paiement)
Ces fonctions ne sont disponibles que si PHP a été compilé avec l'option
--with-cybercash=[DIR]. Ces fonctions ont été
ajoutées dans PHP 4.
10.11.1 cybercash_encr
array cybercash_encr (string wmk, string sk, string inbuff)
Cette fonction retourne un tableau associatif, contenant les éléments
"errcode" et, si "errcode" vaut FALSE, "outbuff" (string),
"outLth" (long) et "macbuff" (string).
10.11.2 cybercash_decr
array cybercash_decr (string wmk, string sk, string inbuff)
Cette fonction retourne un tableau associatif, contenant les éléments
"errcode" et, si "errcode" vaut FALSE, "outbuff" (string),
"outLth" (long) et "macbuff" (string).
10.11.3 cybercash_base64_encode
string cybercash_base64_encode (string inbuff)
10.11.4 cybercash_base64_decode
string cybercash_base64_decode (string inbuff)
10.12 Dates et heures
10.12.1 checkdate
int checkdate (int month, int day, int year) Retourne TRUE si la date fournie est valide, et sinon FALSE. La date est considérée comme valide si :
10.12.2 date
string date (string format, int timestamp )
Retourne une date sous forme d'une chaîne, au format donné par la chaîne format.
La date est fournie sous la forme d'un timestamp. Par
défaut, la date courante est utilisée.
Les caractères non reconnus seront imprimés tels quel. "Z" retournera toujours "0" lorsqu'il est utilisé avec gmdate(). Exemple avec date() print (date("l dS of F Y h:i:s A")); print ("July 1, 2000 is on a " . date("l", mktime(0,0,0,7,1,2000)));
$tomorrow = mktime (0,0,0,date("m") ,date("d")+1,date("Y")); $lastmonth = mktime (0,0,0,date("m")-1,date("d"), date("Y")); $nextyear = mktime (0,0,0,date("m"), date("d"), date("Y")+1);
10.12.3 getdate
array getdate (int timestamp) Retourne un tableau associatif contenant les informations de date et heure du timestamp, avec les champs suivants :
10.12.4 gettimeofday
array gettimeofday (void) C'est une interface vers gettimeofday(2). Elle retourne un tableau associatif qui contient les informations retournées par le système :
10.12.5 gmdate
string gmdate (string format, int timestamp) Identique à la fonction date(), seulement le temps retourné est GMT (Greenwich Mean Time) Par exemple, en Finlande (GMT +0200), la première ligne ci-dessous affiche "Jan 01 1998 00:00:00", tandis que la seconde "Dec 31 1997 22:00:00". Exemple avec gmdate() echo date ("M d Y H:i:s", mktime (0,0,0,1,1,1998)); echo gmdate ("M d Y H:i:s", mktime (0,0,0,1,1,1998));
10.12.6 gmmktime
int gmmktime (int hour, int minute, int second, int month, int day, int year, int is_dst )
Identique à mktime() hormis le fait que les paramètres passés
sont GMT.
10.12.7 gmstrftime
string gmstrftime (string format, int timestamp) gmstrftime() se comporte exactement comme strftime() hormis le fait l'heure utilisée est celle de Greenwich (Greenwich Mean Time (GMT)). Par exemple, dans la zone Eastern Standard Time (est des USA) (GMT -0500), la première ligne de l'exemple ci dessous affiche "Dec 31 1998 20:00:00", tandis que la seconde affiche "Jan 01 1999 01:00:00". Exemple avec gmstrftime() setlocale ('LC_TIME', 'en_US'); echo strftime ("%b %d %Y %H:%M:%S", mktime (20,0,0,12,31,98))."\n"; echo gmstrftime ("%b %d %Y %H:%M:%S", mktime (20,0,0,12,31,98))."\n";
10.12.8 localtime
array localtime (int timestamp , bool is_associative ) localtime() retourne un tableau identique en structure à celui retourné par la fonction C. Le premier argument de localtime() est un timestamp (si il est omis, le timestamp courant est utilisé). Le deuxième argument is_associative, si il est omis ou fixé à 0, le tableau est retourné comme un tableau standard (index numérique). Si il est fixé à 1, localtime() est un tableau associatif contenant les différents éléments de la structure retourné par la fonction C. Les noms des clés utilisées sont les suivantes :
10.12.9 microtime
string microtime
Retourne la chaîne "msec sec" avec sec qui est mesurée en secondes depuis le
début de l'époque UNIX, (1er janvier 1970 00:00:00 GMT), et msec qui est le
nombre de microsecondes de cette heure. Cette fonction est seulement disponible
sur les systèmes d'exploitation qui supportent la fonction gettimeofday().
10.12.10 mktime
int mktime (int hour, int minute, int second, int month, int day, int year, int is_dst )
ATTENTION : l'ordre des arguments est différent de celui
de la commande UNIX habituelle mktime(), et fournit des résultats aléatoires si
on oublie cet ordre. C'est une erreur très commune que de se tromper de sens.
echo date ("M-d-Y", mktime (0,0,0,12,32,1997)); echo date ("M-d-Y", mktime (0,0,0,13,1,1997)); echo date ("M-d-Y", mktime (0,0,0,1,1,1998)); echo date ("M-d-Y", mktime (0,0,0,1,1,98));
year peut prendre deux ou quatre chiffres, avec les valeurs
entre 0-69 qui correspondent à 2000-2069 et 70-99 à 1970-1999 (sur les systèmes oú
time_t sont sur des entiers 32bit signés, comme cela se fait le plus souvent de
nos jours, year est valide dans l'intervalle 1902 and 2037.
$lastday = mktime (0,0,0,3,0,2000); echo strftime ("Le dernier jour de Février 2000 est: %d", $lastday); $lastday = mktime (0,0,0,4,-31,2000); echo strftime ("Le dernier jour de Février 2000 est: %d", $lastday); 10.12.11 strftime
string strftime (string format, int timestamp)
Retourne la date sous la forme d'une chaîne formatée conformément au format
format, en utilisant le timestamp timestamp
donné. Si le timestamp est omis, la date actuelle est
utilisée. Les mois et jours de la semaine, et toutes les chaînes dépendantes de
la langue sont fixées avec la commande setlocale().
Exemple strftime() setlocale ("LC_TIME", "C"); print(strftime("%A en Finlandais est ")); setlocale ("LC_TIME", "fi"); print(strftime("%A, en Français ")); setlocale ("LC_TIME", "fr"); print(strftime("%A est en Allemand ")); setlocale ("LC_TIME", "de"); print(strftime("%A.\n"));
Cet exemple ne fonctionnera que si vous avez les configurations respectives
installées sur votre système.
10.12.12 time
int time
Retourne la heure courante, mesurée en secondes depuis le début de l'époque
UNIX, (1er janvier 1970 00:00:00 GMT).
10.12.13 strtotime
int strtotime (string time, int now ) La fonction prend la chaîne time qui contient une date au format anglais (et en anglais), et tente de la transformer en timestamp UNIX. Exemple avec strtotime() echo strtotime ("now") . "\n"; echo strtotime ("10 September 2000") . "\n"; echo strtotime ("+1 day") . "\n"; echo strtotime ("+1 week") . "\n"; echo strtotime ("+1 week 2 days 4 hours 2 seconds") . "\n";
10.13 dba
Ces fonctions sont l'interface avec les bases de type Berkeley.
<?php $id = dba_open("/tmp/test.db", "n", "db2"); if(!$id) { echo "dba_open a échoué\n"; exit; } dba_replace("key", "Ceci est un exemple!", $id); if(dba_exists("key", $id)) { echo dba_fetch("key", $id); dba_delete("key", $id); } dba_close($id); ?>
<?php # ...ouverture de la base... $key = dba_firstkey($id); while($key != false) { if(...) { # conserver la clé pour faire d'autres opérations plus tard $handle_later[] = $key; } $key = dba_nextkey($id); } for($i = 0; $i < count($handle_later); $i++) dba_delete($handle_later[$i], $id); ?>
10.13.1 dba_close
void dba_close (int handle)
dba_close() ferme le lien établit avec la base et libère toutes
les ressources de handle.
10.13.2 dba_delete
string dba_delete (string key, int handle)
dba_delete() efface l'entrée spécifiée par la clé
key, dans la base identifiée par handle.
10.13.3 dba_exists
bool dba_exists (string key, int handle)
dba_exists() vérifie si la clé key
existe dans la base identifiée par handle.
10.13.4 dba_fetch
string dba_fetch (string key, int handle)
dba_fetch() lit les données spécifiée par la clé
key dans la base identifiée par
handle.
10.13.5 dba_firstkey
string dba_firstkey (int handle)
dba_firstkey() retourne la première clé de la base de données
spécifiée par handle et y place le pointeur interne de
clé. Cela permettra de traverser la base.
10.13.6 dba_insert
bool dba_insert (string key, string value, int handle)
dba_insert() insère l'entrée décrite par la clé
key et la valeur value dans la base
spécifiée par handle. Si une entrée aveec la même clé
key existe déjà, l'insertion échouera. 10.13.7 dba_nextkey
string dba_nextkey (int handle)
dba_nextkey() retourne la clé suivante, dans la base
identifiée par handle et incrémente le pointeur de clé.
10.13.8 dba_popen
int dba_popen (string path, string mode, string handler, ...)
dba_popen() établit une connexion persistante à la base
repérée par path avec le mode mode,
en utilisant l'identifiant handler.
10.13.9 dba_open
int dba_open (string path, string mode, string handler, ...)
dba_open() établit une connexion à la base repérée par
path avec le mode mode et
l'identifiant handler.
10.13.10 dba_optimize
bool dba_optimize (int handle)
dba_optimize() optimise la base de données identifiée par
handle.
10.13.11 dba_replace
bool dba_replace (string key, string value, int handle)
dba_replace() remplaces ou insère une entrée, pour la clé
key et avec la valeur value dans
la base identifiée par handle.
10.13.12 dba_sync
bool dba_sync (int handle)
dba_sync() synchronise la base de données spécifiée par
handle. Si accepté, cela va probablement lancer une opératio nde réécriture
physique du fichier.
10.14 dBase
Ces fonctions vous permettront d'accéder aux enregistrements d'une base au format
dBase (.dbf).
10.14.1 dbase_create
int dbase_create (string filename, array fields)
fields est un tableau de tableaux. Chaque tableau
décrit le format d'un fichier de la base. Chaque champs est constitué d'un nom,
d'un caractère de type de champs, d'une longueur et d'une précision.
// "database" name $dbname = "/tmp/test.dbf"; // database "definition" $def = array( array("date", "D"), array("name", "C", 50), array("age", "N", 3, 0), array("email", "C", 128), array("ismember", "L") ); // création if (!dbase_create($dbname, $def)) print "<strong>Error!</strong>";
10.14.2 dbase_open
int dbase_open (string filename, int flags)
flags est un flag, comme pour la fonction open().
(Typiquement; 0 signifie lecture seule, 1 signifie écriture seule, et
2 écriture/lecture).
10.14.3 dbase_close
bool dbase_close (int dbase_identifier)
Ferme la base associée à dbase_identifier.
10.14.4 dbase_pack
bool dbase_pack (int dbase_identifier)
Compacte la base de données spécifiée (effacement définitif de tous les
enregistrements marqués pour l'effacement, avec la fonction
dbase_delete_record()).
10.14.5 dbase_add_record
bool dbase_add_record (int dbase_identifier, array record)
Ajoute les données de record dans la base spécifiée par
dbase_identifier. Si le nombre de colonnes fourni n'est pas
celui du nombre de champs dans la base, l'opération échouera, et FALSE sera
retourné.
10.14.6 dbase_replace_record
bool dbase_replace_record (int dbase_identifier, array record, int dbase_record_number)
Remplace les données associées à l'enregistrement record_number
par les données enregistrées dans record.
Si le nombre de colonnes fourni n'est pas celui du nombre de champs dans la base,
l'opération échouera, et FALSE sera retourné.
10.14.7 dbase_delete_record
bool dbase_delete_record (int dbase_identifier, int record)
Marque l'enregistrement record pour l'effacement, dans la
base. Pour effacer réellement l'enregistrement, il faut utiliser aussi
dbase_pack().
10.14.8 dbase_get_record
array dbase_get_record (int dbase_identifier, int record)
Retourne les données de l'enregistrement record dans un
tableau. Le tableau est indexé à partir de 0, et inclus un membre nommé
'deleted' (effacé), qui sera mis à 1 si l'enregistrement a été marqué pour
l'effacement (voir dbase_delete_record()).
10.14.9 dbase_get_record_with_names
array dbase_get_record_with_names (int dbase_identifier, int record)
Retourne les données de l'enregistrement record dans un
tableau associatif. Le tableau inclus un membre nommé 'deleted' (effacé),
qui sera mis à 1 si l'enregistrement a été marqué pour l'effacement (voir
dbase_delete_record()).
10.14.10 dbase_numfields
int dbase_numfields (int dbase_identifier) Retourne le nombre de champs (colonnes) de la base de données spécifiée. Les numéros de champs sont numérotés de 0 à dbase_numfields($db)-1, tandis que les numéros d'enregistrements sont numérotés de 1 à dbase_numrecords($db). Utiliser dbase_numfields() $rec = dbase_get_record($db, $recno); $nf = dbase_numfields($db); for ($i=0; $i < $nf; $i++) { print $rec[$i]."<br>\n"; }
10.14.11 dbase_numrecords
int dbase_numrecords (int dbase_identifier)
Retourne le nombre d'enregistrements (lignes) dans la base spécifiée.
Les numéros de champs sont numérotés de 0 à dbase_numfields($db)-1,
tandis que les numéros d'enregistrements sont numérotés de 1 à
dbase_numrecords($db).
10.15 dbm
Ces fonctions vous permettent d'écrire des lignes dans une base de donnée de
type dbm. Ce type de base (supporté par Berkeley db, gdbm, et quelques librairies
systèmes, ou certaines librairies du système d'exploitation) enregistre les
paires clés/valeurs, (contrairement aux enregistrements par ligne, utilisé
par les autres bases de données relationnelles).
$dbm = dbmopen("dernier", "w"); if (dbmexists($dbm, $userid)) { $last_seen = dbmfetch($dbm, $userid); } else { dbminsert($dbm, $userid, time()); } faire_quelquechose(); dbmreplace($dbm, $userid, time()); dbmclose($dbm);
10.15.1 dbmopen
int dbmopen (string filename, string flags)
Le premier argument est le chemin absolu jusqu'au fichier dbm à ouvrir. Le
deuxième argument est le mode d'ouverture du fichier, qui peut prendre les valeurs
suivantes : "r", "n", "c" ou "w" qui représentent respectivement lecture seule,
nouveau (ce qui implique lecture/écriture, et qui, probablement, va
écraser une base existante), création(ce qui implique lecture/écriture, et
qui, probablement, va écraser une base existante), et lecture/écriture.
10.15.2 dbmclose
bool dbmclose (int dbm_identifier)
Déverrouille et ferme la base de données dbm_identifier.
10.15.3 dbmexists
bool dbmexists (int dbm_identifier, string key)
Retourne TRUE si il y a une valeur associée à la clé
key.
10.15.4 dbmfetch
string dbmfetch (int dbm_identifier, string key)
Retourne la valeur associée à la clé key.
10.15.5 dbminsert
int dbminsert (int dbm_identifier, string key, string value)
Ajoute la valeur value dans la base de données,
avec la clé key.
10.15.6 dbmreplace
bool dbmreplace (int dbm_identifier, string key, string value)
Remplace une valeur courante par la valeur value pour la
clé key, dans une base dbm.
10.15.7 dbmdelete
bool dbmdelete (int dbm_identifier, string key)
Efface la valeur de la clé key, dans la base dbm.
10.15.8 dbmfirstkey
string dbmfirstkey (int dbm_identifier)
Retourne la première clé de la base de données. Notez bien que les clés ne sont
pas dans un ordre défini, étant donné que la table est construite comme une table
de hash.
10.15.9 dbmnextkey
string dbmnextkey (int dbm_identifier, string key) Retourne la clé après la clé key. En appelant dbmfirstkey(), puis successivement dbmnextkey(), il est possible de passer en revue toute les paires clé/valeur de la base de données dbm. Par exemple : Passer en revue une base de données. $key = dbmfirstkey($dbm_id); while ($key) { echo "$key = " . dbmfetch($dbm_id, $key) . "\n"; $key = dbmnextkey($dbm_id, $key); }
10.15.10 dblist
string dblist (void)
10.16 Accès aux dossiers
10.16.1 chdir
int chdir (string directory)
Change le dossier courant de PHP en directory.
Retourne FALSE si l'opération échoue, et TRUE sinon.
10.16.2 dir
new dir (string directory) Un mécanisme pseudo-objet permet la lecture d'un dossier. L'argument directory doit être ouvert. Deux propriétés sont disponibles une fois le dossier ouvert : le pointeur peut être utilisé avec d'autres fonctions telles que readdir(), rewinddir() et closedir(). Le chemin du dossier est le chemin fourni lors de la construction de l'objet. Trois méthodes permettent de lire, remettre à zéro et fermer le dossier. dir() example $d = dir("/etc"); echo "Pointeur: ".$d->handle."<br>\n"; echo "Chemin: ".$d->path."<br>\n"; while($entry=$d->read()) { echo $entry."<br>\n"; } $d->close();
10.16.3 closedir
void closedir (int dir_handle)
closedir() ferme le pointeur de dossier
dir_handle. Le dossier devait avoir été ouvert avec
opendir().
10.16.4 getcwd
string getcwd
Retourne le dossier de travail courant.
10.16.5 opendir
int opendir (string path)
opendir() retourne un pointeur sur un dossier pour être
utilisé avec les fonctions closedir(),
readdir() et rewinddir().
10.16.6 readdir
string readdir (int dir_handle) readdir() retourne le nom du fichier suivant dans le dossier identifié par dir_handle. Les noms sont retournés dans n'importe quel ordre. Liste tous les fichiers du dossier courant <?php $handle=opendir('.'); echo "Pointeur de dossier: $handle\n"; echo "Fichiers:\n"; while ($file = readdir($handle)) { echo "$file\n"; } closedir($handle); ?>
<?php $handle=opendir('.'); while ($file = readdir($handle)) { if ($file != "." && $file != "..") { echo "$file\n"; } } closedir($handle); ?>
10.16.7 rewinddir
void rewinddir (int dir_handle)
rewinddir() retourne à la première entrée du dossier :
le prochain fichier lu sera le premier.
10.17 DOM XML
Ces fonctions ne sont disponibles que si PHP a été configuré avec l'option
--with-dom=[DIR], et utilise la librairie
GNOME xml library. Vous aurez aussi besoin de la librairie libxml-2.0.0 (la version
beta ne fonctionne pas). Ces fonctions ont été ajoutées dans PHP 4.
10.17.1 xmldoc
object xmldoc (string str)
xmldoc() analyse le document XML str et
retourne un objet de classe "Dom document", avec les propriétés de "doc"
(ressources), "version" (string) et "type" (long).
10.17.2 xmldocfile
object xmldocfile (string filename)
xmldocfile() analyse le fichier XMLfilename
et retourne un objet "Dom document", avec les propriétées de "doc" (ressources) et
"version" (string).
10.17.3 xmltree
object xmltree (string str)
xmltree() analyse le document XML str
et retourne un arbre d'objets PHP qui représente le document analysé.
10.18 Gestion des erreurs
Ces fonctions permettent de gérer les erreurs, et de les enregistrer.
Vous pouvez définir les règles de traitement des erreurs et choisir
la manière de les enregistrer : vous pouvez adapter le rapport d'erreur
à vos besoins.
10.18.1 error_log
int error_log (string message, int message_type, string destination , string extra_headers ) Envoie un message d'erreur à l'historique du serveur web, à un port TCP ou un fichier. message est le message d'erreur qui doit être enregistré. message_type indique où le message doit être envoyé :
Exemples avec error_log() // Envoi une notification par l'historique du serveur, si la connexion à la base // de données est impossible. if (!Ora_Logon ($username, $password)) { error_log ("Base Oracle indisponible!", 0); } // Indiquer à l'administrateur, par email, qu'il n'y a plus de FOO if (!($foo = allocate_new_foo()) { error_log ("Aya!, Il ne reste plus de FOO disponibles!", 1, "operateur@mondomaine.com"); } // D'autres manières d'appeler error_log(): error_log ("Grosse bourde!", 2, "127.0.0.1:7000"); error_log ("Grosse bourde!", 2, "loghost"); error_log ("Grosse bourde!", 3, "/var/tmp/my-errors.log");
10.18.2 error_reporting
int error_reporting (int level ) Fixe le niveau de rapport d'erreur PHP et retourne l'ancienne valeur. Le niveau d'erreur peut être un champs de bit, ou une constante. L'utilisation des constantes est vivement recommandé, pour assurer une compatiblité maximale avec les futures versions. Au fur et à mesure que de nouveaux niveaux d'erreurs sont créés, l'intervalle de validité des niveaux évolue, et les anciennes valeurs n'ont plus les mêmes significations. Exemple de modification de niveau d'erreur error_reporting (55); // En PHP 3, équivalent à E_ALL ^ E_NOTICE /* ...en PHP 4, '55' signifie (E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING) */ error_reporting (2039); // PHP 4 équivalent à E_ALL ^ E_NOTICE error_reporting (E_ALL ^ E_NOTICE); // La même signification en PHP 3 et 4 Suivez les liens de chaque valeur interne pour connaître leur signification :
Exemples avec error_reporting() error_reporting(0); /* Empêche tout affichage d'erreur */ error_reporting (7); // Ancienne syntaxe PHP 2/3 error_reporting (E_ERROR | E_WARNING | E_PARSE); // Nouvelle syntaxe PHP 3/4 /* Utilisation appropriée pour les erreurs courantes d'exécution */ error_reporting (15); // Ancienne syntaxe, PHP 2/3 error_reporting (E_ERROR | E_WARNING | E_PARSE | E_NOTICE); // Nouvelle syntaxe PHP 3/4 /* Utilisation appropriée pour les erreurs courantes de développement (variables non initialisées..)*/ error_reporting (63); // Ancienne syntaxe, PHP 2/3 error_reporting (E_ALL); // Nouvelle syntaxe PHP3/4 /* rapporte toutes les erreurs PHP*/
10.18.3 restore_error_handler
void restore_error_handler (void)
Utilisée après avoir modifié la fonction de gestion des erreurs, grâce à
set_error_handler(), cette fonction permet de re-utiliser
l'ancienne version de gestion des erreurs (qui peut être la fonction PHP
par défaut, ou une autre fonction utilisateur).
10.18.4 set_error_handler
string set_error_handler (string error_handler)
Choisi la fonction utilisateur error_handler pour gérer
les erreurs dans un script. Retourne un pointeur sur l'ancienne fonction
de gestion des erreurs (si il y en avait une), ou FALSE, en cas d'erreur.
Cette fonction sert à définir votre propre gestionnaire d'erreur, qui
prendra en charge leur traitement durant l'exécution d'un script. Cela peut
être utile lorsque vous devez reperer des erreurs critiques lors d'un
nettoyage de bases, ou bien si vous souhaitez générer une erreur dans
certaines conditions (avec trigger_error()).
<?php // redéfinit les constantes utilisateurs - PHP 4 seulement define (FATAL,E_USER_ERROR); define (ERROR,E_USER_WARNING); define (WARNING,E_USER_NOTICE); // Fixe le niveau de rapport d'erreur pour ce script error_reporting (FATAL + ERROR + WARNING); // Fonction de traitement des erreurs function myErrorHandler ($errno, $errstr) { switch ($errno) { case FATAL: echo "<b>FATAL</b> [$errno] $errstr<br>\n"; echo " Erreur fatale à la ligne ".__LINE__." du fichier ".__FILE__; echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br>\n"; echo "Aborting...<br>\n"; exit -1; break; case ERROR: echo "<b>ERREUR</b> [$errno] $errstr<br>\n"; break; case WARNING: echo "<b>ALERTE</b> [$errno] $errstr<br>\n"; break; default: echo "Erreur inconnue de type : [$errno] $errstr<br>\n"; break; } } // fonction qui teste la gestion d'erreur function scale_by_log ($vect, $scale) { if ( !is_numeric($scale) || $scale <= 0 ) trigger_error("log(x) pour x <= 0 est indéfini, vous avez passé: scale = $scale", FATAL); if (!is_array($vect)) { trigger_error("Vecteur d'entrée incorrect : un tableau de valeurs est attendu : ", ERROR); return null; } for ($i=0; $i<count($vect); $i++) { if (!is_numeric($vect[$i])) trigger_error("La valeur à la position $i n'est pas un nombre. On utilise 0 (zéro) à la place", WARNING); $temp[$i] = log($scale) * $vect[$i]; } return $temp; } // Ancienne fonction de traitement des erreurs $old_error_handler = set_error_handler("myErrorHandler"); // Génération de quelques erreurs : définition d'un tableau avec des éléments non numériques echo "vector a\n"; $a = array(2,3,"foo",5.5,43.3,21.11); print_r($a); // définition d'un deuxième table à problème echo "----\nvector b - a alerte (b = log(PI) * a)\n"; $b = scale_by_log($a, M_PI); print_r($b); // Ceci est un problème, on passe une chaîne à la place d'un tableau echo "----\nvector c - une erreur\n"; $c = scale_by_log("not array",2.3); var_dump($c); // Ceci est critique : le tableau contient des valeurs négatives echo "----\nvector d - fatal error\n"; $d = scale_by_log($a, -2.5); ?> L'éxécution du script devrait donner ceci : vector a Array ( [0] => 2 [1] => 3 [2] => foo [3] => 5.5 [4] => 43.3 [5] => 21.11 ) ---- vector b - une alerte (b = log(PI) * a) <b>WARNING</b> [1024] La valeur à la position 2 n'est pas un nombre. On utilise 0 (zéro) à la place<br> Array ( [0] => 2.2894597716988 [1] => 3.4341896575482 [2] => 0 [3] => 6.2960143721717 [4] => 49.566804057279 [5] => 24.165247890281 ) ---- vector c - an error <b>ERROR</b> [512] Vecteur d'entrée incorrect : un tableau de valeur est attendu<br> NULL ---- vector d - fatal error <b>FATAL</b> [256] log(x) de x <= 0 est indéfini : scale = -2.5<br> Erreur fatale à la ligne 16 du fichier trigger_error.php, PHP 4.0.1pl2 (Linux)<br> Annulation du script....<br>
10.18.5 trigger_error
void trigger_error (string error_msg, int error_type ) Utilisé pour déclencher une erreur utilisateur, cette fonction peut être utilisée en conjonction avec un gestionnaire d'erreur interne, ou un gestionnaire d'erreur utilisateur qui a été choisi comme gestionnaire d'erreur avec set_error_handler(). Cette fonction est pratique lorsque vous devez générer une réponse particulière lors de l'exécution. Par exemple if (assert ($divisor == 0)) trigger_error ("Impossible de divider par zero", E_USER_ERROR);
Note :
Voir set_error_handler() pour illustration.
10.18.6 user_error
void user_error (string error_msg, int error_type )
Ceci est un alias de la fonction trigger_error().
10.19 Fonction d'exécution de programmes
10.19.1 escapeshellarg
string escapeshellarg (string arg)
escapeshellarg() ajoute des guillemets simples autour des
chaînes de caractères, et ajoute des guillemets puis échappe les guillemets simples
de la chaîne. Cela permet de faire passer directement une chaîne comme argument
shell, tout en assurant un maximum de sécurité. Cette fonction doit être
utilisée pour traiter individuellement chacun des arguments à passer au
shell. Les fonctions shell sont exec(),
system() est les opétrateur de
9.7.6 Opérateur d'exécutions.
Une utilisation typique est :
system("ls ".EscapeShellArg($dir))
10.19.2 escapeshellcmd
string escapeshellcmd (string command)
escapeshellcmd() échappe tous les caractères de la chaîne
command qui pourraient avoir une signification spéciale
dans une commande shell. Cette fonction permet de s'assurer que la commande sera
correctement passée à l'exécuteur de commande shell exec() et
system(), ou encore à 9.7.6 Opérateur d'exécutions. Généralement, cette fonction est utilisée comme ceci : system(EscapeShellCmd($cmd))
10.19.3 exec
string exec (string command, string array , int return_var )
exec() éxecute la commande command,
mais ne renvoie rien comme retour, hormis la dernière ligne du résultat de la
commande. Pour exécuter une commande et obtenir le résultat sans aucun traitement,
il faut utiliser la fonction passthru().
10.19.4 passthru
void passthru (string command, int return_var )
La fonction passthru() est similaire à la fonction
exec() car les deux exécutent la commande command.
Si l'argument return_var est présent, le code de statut
de réponse UNIX y sera placé. Cette fonction doit être utilisée de préférence aux
commandes exec() ou system() lorsque le
résultat attendu est de type binaire, et doit être passé tel quel à un navigateur.
Une utilisation classique de cette fonction est l'exécution de l'utilitaire pbmplus
qui peut retourner une image. En fixant le résultat du contenu (content-type)
à "image/gif" puis en appelant pbmplus pour obtenir une image gif,
vous pouvez créer des scripts PHP qui retourne des images.
10.19.5 system
string system (string command, int return_var )
system() est la version PHP de la fonction C qui exécute la
commande command et retourne le résultat. Si une variable
est fournie comme second argument, alors le code de statut de la commande y sera
affecté.
10.20 Forms Data Format
Forms Data Format (FDF) est un format de fomulaire pour les documents PDF.
Vous pouvez lire la documentation (en anglais) à
http://partners.adobe.com/asn/developer/acrosdk/forms.html
pour plus de détails sur les tenants et les aboutissants.
<?php // Sauver le fichier FDF dans un fichier temporaire. $fdffp = fopen("test.fdf", "w"); fwrite($fdffp, $HTTP_FDF_DATA, strlen($HTTP_FDF_DATA)); fclose($fdffp); // Ouvrir le fichier temporaire, et utiliser les données. // Le formulaire pdf contenait différents fichiers texte, avec pour nom : // volume, date, comment, publisher, preparer, ainsi que deux boîtes à cocher, // show_publisher et show_preparer. $fdf = fdf_open("test.fdf"); $volume = fdf_get_value($fdf, "volume"); echo "La valeur du champs volume était : '<B>$volume</B>'<BR>"; $date = fdf_get_value($fdf, "date"); echo "La valeur du champs date était '<B>$date</B>'<BR>"; $comment = fdf_get_value($fdf, "comment"); echo "La valeur du champs comment était '<B>$comment</B>'<BR>"; if(fdf_get_value($fdf, "show_publisher") == "On") { $publisher = fdf_get_value($fdf, "publisher"); echo "La valeur du champs publisher était : '<B>$publisher</B>'<BR>"; } else echo "La valeur du champs ne doit pas être affichée.<BR>"; if(fdf_get_value($fdf, "show_preparer") == "On") { $preparer = fdf_get_value($fdf, "preparer"); echo "La valeur du champs preparer était '<B>$preparer</B>'<BR>"; } else echo "La valeur du champs Preparer ne doit pas être affiché.<BR>"; fdf_close($fdf); ?> 10.20.1 fdf_open
int fdf_open (string filename)
La fonction fdf_open() ouvre un fichier avec formulaire.
Le fichier doit contenir les données retournées par le formulaire PDF.
Actuellement, le fichier doit être créée 'manuellement', en utilisant la fonction
fopen() et en y écrivant le contenu du tableau HTTP_FDF_DATA
avec la fonction fwrite().
Un mécanisme comparable aux formulaires HTML qui créent une variable pour chaque
champs entrant, n'existe pas.
<?php // Sauver le fichier FDF dans un fichier temporaire. $fdffp = fopen("test.fdf", "w"); fwrite($fdffp, $HTTP_FDF_DATA, strlen($HTTP_FDF_DATA)); fclose($fdffp); // Ouvrir le fichier temporaire, et utiliser les données. $fdf = fdf_open("test.fdf"); ... fdf_close($fdf); ?>
10.20.2 fdf_close
void fdf_close (int fdf_document)
fdf_close() ferme le document FDF. 10.20.3 fdf_create
int fdf_create (void )
fdf_create() crée un nouveau document FDF.
Cette fonction est nécessaire pour ceux qui veulent pré remplir les champs d'un
formulaire dans un fichier PDF.
<?php $outfdf = fdf_create(); fdf_set_value($outfdf, "volume", $volume, 0); fdf_set_file($outfdf, "http:/testfdf/resultlabel.pdf"); fdf_save($outfdf, "outtest.fdf"); fdf_close($outfdf); Header("Content-type: application/vnd.fdf"); $fp = fopen("outtest.fdf", "r"); fpassthru($fp); unlink("outtest.fdf"); ?>
10.20.4 fdf_save
int fdf_save (string filename)
fdf_save() sauve un document FDF.
Le FDF Toolkit fournit un moyen d'envoyer le contenu d'un document FDF à au
fichier de sortie stdout si le paramètre filename vaut '.'.
Ceci ne fonctionne pas si PHP est sous la forme d'un module Apache.
Dans ce cas, il faudra écrire le résultat dans un fichier, et utiliser
fpassthru() pour l'afficher au client.
10.20.5 fdf_get_value
string fdf_get_value (int fdf_document, string fieldname)
fdf_get_value() retourne la valeur d'un champs.
10.20.6 fdf_set_value
void fdf_set_value (int fdf_document, string fieldname, string value, int isName)
fdf_set_value() fixe la valeur d'un champs.
Le dernier paramètre determine si la valeur doit être convertie en nom PDF
(isName = 1) ou affecter une chaîne PDF à un contrôle
(isName = 0).
10.20.7 fdf_next_field_name
string fdf_next_field_name (int fdf_document, string fieldname)
fdf_next_field_name() retourne le nom du champs après le champs
fieldname ou le nom du premier champs, si le second
paramètre est NULL.
10.20.8 fdf_set_ap
void fdf_set_ap (int fdf_document, string field_name, int face, string filename, int page_number)
fdf_set_ap() fixe l'apparence d'un champs
(i.e. la valeur de la clé /AP).
Les valeurs possibles de face sont
sont 1=FDFNormalAP, 2=FDFRolloverAP, 3=FDFDownAP. 10.20.9 fdf_set_status
void fdf_set_status (int fdf_document, string status)
fdf_set_status() fixe la valeur de la clé /STATUS. 10.20.10 fdf_get_status
string fdf_get_status (int fdf_document)
fdf_get_status() retourne la valeur de la clé /STATUS.
10.20.11 fdf_set_file
void fdf_set_file (int fdf_document, string filename)
fdf_set_file() Fixe la valeur de la clé /F. la clé /F est
simplement une référence sur un formulaire PDF qui doit être pré-remplis.
Dans un environnement web, c'est une URL (e.g. http:/testfdf/resultlabel.pdf).
10.20.12 fdf_get_file
string fdf_get_file (int fdf_document)
fdf_set_file() lit la valeur de la clé /F.
10.20.13 fdf_set_opt
void fdf_set_opt (int fdf_document, string fieldname, int element, string str1, string str2)
fdf_set_opt() affecte les options du
champsfieldname.
10.20.14 fdf_set_submit_form_action
void fdf_set_submit_form_action (int fdf_document, string fieldname, int trigger, string script, int flags)
fdf_set_submit_form_action() affecte une action
javascript au champs fieldname.
10.20.15 fdf_set_javascript_action
void fdf_set_javascript_action (int fdf_document, string fieldname, int trigger, string script)
fdf_set_submit_form_action() affecte une action
javascript au champs fieldname.
10.21 FilePro
Ces fonctions permettent de lire des données enregistrées dans des bases non
modifiables, sur des serveurs filePro.
10.21.1 filepro
bool filepro (string directory)
Cette fonction lit et vérifie un fichier, puis enregistre le nombre de champs et
de lignes.
10.21.2 filepro_fieldname
string filepro_fieldname (int field_number)
Retourne le nom du champs d'index field_number.
10.21.3 filepro_fieldtype
string filepro_fieldtype (int field_number)
Retourne le type du champs d'index field_number.
10.21.4 filepro_fieldwidth
int filepro_fieldwidth (int field_number)
Retourne la taille du champs d'index field_number.
10.21.5 filepro_retrieve
string filepro_retrieve (int row_number, int field_number)
Retourne la valeur du champs d'index row_number, et à la
ligne field_number.
10.21.6 filepro_fieldcount
Retourne le nombre de champs (ou colonnes) d'une base filePro.
10.21.7 filepro_rowcount
int filepro_rowcount
Retourne le nombre de lignes dans une base filePro.
10.22 Système de fichiers
10.22.1 basename
string basename (string path)
Cette fonction prend en paramètre le chemin complet d'un fichier et en
extrait le nom du fichier.
$path = "/home/httpd/html/index.php3"; $file = basename($path); // $file est affecté avec "index.php3"
10.22.2 chgrp
int chgrp (string filename, mixed group)
chgrp() essaie de changer le groupe propriétaire du fichier.
Seul le superuser (root) peut changer le groupe propriétaire d'un fichier
arbitrairement. Les utilisateurs classiques ne peuvent changer le groupe
propriétaire d'un fichier que si l'utilisateur propriétaire du fichier est
membre du groupe.
10.22.3 chmod
int chmod (string filename, int mode)
chmod() remplace le mode du fichier
filename par le mode mode.
chmod( "/somedir/somefile", 755 ); // notation décimale; probablement FALSE chmod( "/somedir/somefile", 0755 ); // notation octale; valeur du mode correcte
10.22.4 chown
int chown (string filename, mixed user)
chown() change le groupe propriétaire du fichier. Seul le
superutilisateur (root) peut changer le propriétaire d'un fichier.
10.22.5 clearstatcache
void clearstatcache
L'appel à la fonction 10.22.6 copy
int copy (string source, string dest) copy() fait une copie du fichier. Renvoie TRUE en cas de succès, FALSE sinon. Exemple avec copy() if ( !copy($file, $file.'.bak') ) { print("La copie du fichier $file n'a pas réussi...<br>\n"); }
10.22.7 delete
void delete (string file)
Ceci est une fausse entrée du manuelle pour ceux qui recherchent en fait
la fonction unlink() ou unset().
10.22.8 dirname
string dirname (string path)
Si path contient le chemin d'un fichier ou dossier, cette
fonction retournera le nom du dossier qui le contient.
$path = "/etc/passwd"; $file = dirname($path); // $file contient "/etc"
10.22.9 diskfreespace
float diskfreespace (string directory)
diskfreespace() retournera le nombre d'octets disponible sur
le disque correspondant contenant le dossier directory.
$df = diskfreespace("/"); // $df contient le nombre d'octets libres sur "/"
10.22.10 fclose
int fclose (int fp)
Ferme le fichier fp.
10.22.11 feof
int feof (int fp)
feof() retourne TRUE si le pointeur fp
est à la fin du fichier, ou si une erreur survient, sinon, retourne FALSE.
10.22.12 fgetc
string fgetc (int fp)
fgetc() retourne une chaîne contenant un seul caractère, lu
depuis le fichier pointé par fp.
Retourne FALSE à la fin du fichier (tout comme feof()).
10.22.13 fgetcsv
array fgetcsv (int fp, int length, string delimiter )
Identique à fgets() mais fgetcsv()
analyse la ligne qu'il lit et recherche les champs CSV, qu'il va retourner dans un
tableau les contenant. Le délimiteur de champs delimiter
est la virgule, à moins que vous ne fournissiez un troisième argument.
$row = 1; $fp = fopen ("test.csv","r"); while ($data = fgetcsv ($fp, 1000, ",")) { $num = count ($data); print "<p> $num champs dans la ligne $row: <br>"; $row++; for ($c=0; $c<$num; $c++) { print $data[$c] . "<br>"; } } fclose ($fp); 10.22.14 fgets
string fgets (int fp, int length)
fgets() retourne la chaîne lue jusqu'à la longueur
length - 1 octets, ou bien la fin du fichier, ou encore
un retour chariot (le premier des trois qui sera rencontré).
$fd = fopen ("/tmp/inputfile.txt", "r"); while (!feof($fd)) { $buffer = fgets($fd, 4096); echo $buffer; } fclose ($fd);
10.22.15 fgetss
string fgetss (int fp, int length, string allowable_tags )
Identique à fgets(), mais fgetss() supprime
toutes les balises HTML et PHP qu'il trouve dans le texte lu.
10.22.16 file
array file (string filename, int use_include_path )
Identique à readfile(), hormis le fait que file()
retourne le fichier dans un tableau. Chaque élément du tableau correspond à une
ligne du fichier, et les retour chariots sont placés en fin de ligne.
<?php // Lire une page web dans un tableau, et l'afficher $fcontents = file( 'http://www.php.net' ); while ( list( $line_num, $line ) = each( $fcontents ) ) { echo "<b>Line $line_num:</b> " . htmlspecialchars( $line ) . "<br>\n"; } // lire une page web dans une chaîne $fcontents = join( '', file( 'http://www.php.net' ) ); ?>
10.22.17 file_exists
int file_exists (string filename)
Retourne TRUE si le fichier filename existe, et
FALSE sinon.
10.22.18 fileatime
int fileatime (string filename)
fileatime() renvoie la date à laquelle le fichier a été
accédé pour la dernière fois, ou FALSE en cas d'erreur.
10.22.19 filectime
int filectime (string filename)
filectime() renvoie l'heure à laquelle l'inode
filename a été accédé pour la dernière fois,
ou FALSE en cas d'erreur.
10.22.20 filegroup
int filegroup (string filename)
filegroup() renvoie le groupe qui possède le fichier
filename ou FALSE en cas d'erreur.
L'identifiant de groupe est retourné au format numérique, utilisez
posix_getgrgid() pour retrouver le nom du groupe.
10.22.21 fileinode
int fileinode (string filename)
fileinode() renvoie le numéro d'inode du fichier
filename, ou FALSE en cas d'erreur.
10.22.22 filemtime
int filemtime (string filename)
filemtime() renvoie la date de dernière modification du
fichier filename, ou FALSE en cas d'erreur.
10.22.23 fileowner
int fileowner (string filename)
fileowner() renvoie le nom du possesseur du fichier
filename, ou FALSE en cas d'erreur.
L'identification du possesseur de fichier est numérique : il faut utiliser
posix_getpwuid() pour retrouver le nom d'utilisateur.
10.22.24 fileperms
int fileperms (string filename)
fileperms() renvoie les permissions affectées au fichier
filename, ou FALSE en cas d'erreur.
10.22.25 filesize
int filesize (string filename)
filesize() renvoie la taille du fichier
filename, ou FALSE en cas d'erreur.
10.22.26 filetype
string filetype (string filename)
filetype() renvoie le type du fichier filename.
Les réponses possibles sont : fifo, char, dir, block, link, file, et unknown.
10.22.27 flock
bool flock (int fp, int operation)
PHP dispose d'un système complet de verrouillage de fichiers.
Tous les programmes qui accèdent au fichier doivent utiliser la même méthode
de verrouillage pour qu'il soit efficace.
10.22.28 fopen
int fopen (string filename, string mode, int use_include_path )
Si filename commence par "http://" (insensible à la casse),
une connexion HTTP 1.x est ouverte avec le serveur spécifié, et un pointeur
sur la réponse fournie est retourné.
De plus, mode peut contenir la lettre 'b'. Cette option
n'est utile que sur les systèmes qui font la différence entre les fichiers
binaires et les fichiers textes (en bref, c'est inutile sous Unix). Si il n'est
pas nécessaire, il sera ignoré.
$fp = fopen("/home/rasmus/file.txt", "r"); $fp = fopen("http://www.php.net/", "r"); $fp = fopen("ftp://user:password@example.com/", "w");
$fp = fopen("c:\\data\\info.txt", "r");
10.22.29 fpassthru
int fpassthru (int fp)
fpassthru() lit tout le reste d'un fichier jusqu'à la fin, et
dirige le résultat vers la sortie standard.
10.22.30 fputs
int fputs (int fp, string str, int length )
fputs() est un alias de fwrite(),
et lui est identique en tout point. Notez que length est
un paramètre optionnel, et si il n'est pas spécifié, toute la chaîne est écrite.
10.22.31 fread
string fread (int fp, int length)
fread() lit jusqu'à length octets dans le
fichier reférencé par fp. La lecture s'arrête lorsque
length octets ont été lus, ou que l'on a atteint la fin du
fichier, ou qu'une erreur survient (le premier des trois).
// Lit un fichier, et le place dans une chaîne $filename = "/usr/local/something.txt"; $fd = fopen ($filename, "r"); $contents = fread ($fd, filesize ($filename)); fclose ($fd);
10.22.32 fscanf
mixed fscanf (int handle, string format, string var1... ) fscanf() est similaire à sscanf(), mais elle prend comme entrée un fichier, associé à handle et l'interprète en fonction du format format. Si seulement deux paramètres sont passés à la fonction, les valeurs parsées seront retournées sous forme de tableau. Si des arguments optionnels sont passés, la fonction retournera le nombre de valeurs assignées. Les options doivent etre passées par référence. Exemple fscanf() $fp = fopen ("users.txt","r"); while ($userinfo = fscanf ($fp, "%s\t%s\t%s\n")) { list ($name, $profession, $countrycode) = $userinfo; //... traitement des données } fclose($fp); janus argonaute gr rodin sculpteur fr som oncle us leonard inventeur it
10.22.33 fseek
int fseek (int fp, int offset)
fseek() positionne le pointeur interne de fichier dans le
fichier référencé par fp à l'offset offset.
Equivalent à la fonction C fseek(fp, offset, SEEK_SET).
10.22.34 fstat
array fstat (int fp)
Rassemble les informations sur le fichier dont on connait le pointeur
fp. Cette fonction est similaire à la fonction
stat(), hormis le fait qu'elle utilise un pointeur de
fichier, au lieu d'un nom de fichier.
* - uniquement sur les systèmes qui supporte le type st_blksize type§les autres systèmes (i.e. Windows) retourne -1 10.22.35 ftell
int ftell (int fp)
ftell() retourne la position courante du pointeur dans le
fichier repéré par le pointeur fp, i.e., son offset.
10.22.36 ftruncate
int ftruncate (int fp, int size)
ftruncate() prend le pointeur de fichier
fp et le tronque à la taille de
size. La fonction retourne TRUE en cas
de succès, et false sinon.
10.22.37 fwrite
int fwrite (int fp, string string, int length )
fwrite() écrit le contenu de la chaîne
string dans le fichier pointé par fp.
Si la longueur length est fournie, l'écriture s'arrêtera
après length octets, ou à la fin de la chaîne (le premier
des deux).
10.22.38 set_file_buffer
int set_file_buffer (int fp, int buffer)
L'écriture de fichier avec fwrite() utilise normalement
un buffer de 8K. Cela signifie que si deux processus essaie d'écrire
dans le même fichier, ils font une pause tous les 8ko pour laisser le temps
à l'autre d'écrire à son tour. set_file_buffer()
permet de modifier la taille du buffer de sortie pour le pointeur de
fichier fp à buffer octets.
Si buffer vaut 0, l'écriture se fera sans buffer.
Cela force l'écriture de toutes les données par un processus avant que
les autres puisse accéder au fichier.
$fp=fopen($file, "w"); if($fp){ set_file_buffer($fp, 0); fputs($fp, $output); fclose($fp); } 10.22.39 is_dir
bool is_dir (string filename)
Retourne TRUE si filename existe et est un dossier.
10.22.40 is_executable
bool is_executable (string filename)
Retourne TRUE si filename existe et est exécutable.
10.22.41 is_file
bool is_file (string filename)
Retourne TRUE si filename existe et est un fichier
(et pas un dossier).
10.22.42 is_link
bool is_link (string filename)
Retourne TRUE si filename existe et est un lien
symbolique.
10.22.43 is_readable
bool is_readable (string filename)
is_readable() retourne vrai si filename
existe et est accessible en lecture.
10.22.44 is_writeable
bool is_writeable (string filename)
is_writeable() retourne TRUE si filename
existe et est accessible en lecture.
10.22.45 is_uploaded_file
bool is_uploaded_file (string filename)
Cette fonction est disponible à partir des version PHP 3.0.16 et
4.0.2.
10.22.46 link
int link (string target, string link)
link() crée un lien.
10.22.47 linkinfo
int linkinfo (string path)
linkinfo() renvoie les informations à propos d'un lien le
champs st_dev de la structure d'information d' UNIX (comme en langage C).
Cette fonction sert à vérifier si un lien (repéré par path)
existe (en utilisant la même méthode que la macro S_ISLNK de stat.h).
Retourne FALSE en cas d'erreur.
10.22.48 mkdir
int mkdir (string pathname, int mode)
Tente de créer un dossier dans le chemin pathname.
mkdir ("/path/to/my/dir", 0700);
10.22.49 move_uploaded_file
bool move_uploaded_file (string filename, string destination)
Cette fonction est disponible à partir des version PHP 3.0.16 et
4.0.2.
10.22.50 pclose
int pclose (int fp)
pclose() ferme un processus de pointeur de fichier ouvert par
popen().
10.22.51 popen
int popen (string commet, string mode)
popen() ouvre un processus fils en faisant un fork de la
commande.
$fp = popen ("/bin/ls", "r");
10.22.52 readfile
int readfile (string filename, int use_include_path )
readfile() lis le fichier filename et
l'envoi à la sortie standard.
10.22.53 readlink
string readlink (string path)
readlink() fait la même chose que la fonction readlink en C :
elle retourne le contenu du lien symbolique repéré par path,
ou FALSE en cas d'erreur.
10.22.54 rename
int rename (string oldname, string newname)
rename() rente de renommer le fichier
oldname en newname.
10.22.55 rewind
int rewind (int fp)
Replace le pointeur du fichier fp au début.
10.22.56 rmdir
int rmdir (string dirname)
rmdir() tente d'effacer le dossier dont le chemin est
dirname. Le dossier doit être vide, et le script doit
avoir les autorisations adéquates.
10.22.57 stat
array stat (string filename)
stat() renvoie les informations à propos du fichier filename.
* - uniquement sur les systèmes qui supporte le type st_blksize type§les autres systèmes (i.e. Windows) retourne -1 10.22.58 lstat
array lstat (string filename)
Cette fonction est identique à stat() mais elle accepte aussi
un lien symbolique comme argument.
* - uniquement sur les systèmes qui supporte le type st_blksize type§les autres systèmes (i.e. Windows) retourne -1 10.22.59 realpath
string realpath (string path)
realpath() résoud tous les liens symbolique, et
remplace toutes les références '/./', '/../' et '/' de
path puis retourne le chemin canonique absolu
ainsi trouvé. Le résultat ne contient aucun lien symbolique,
'/./' ou '/../'.
$real_path = realpath ("../../index.php");
10.22.60 symlink
int symlink (string target, string link)
symlink() crée un lien symbolique pour l'objet
target avec le nom de link.
10.22.61 tempnam
string tempnam (string dir, string prefix)
tempnam() crée un fichier temporaire unique dans le dossier
dir. Si le dossier n'existe pas, tempnam()
va générer un nom de fichier dans le dossier temporaire du système.
$tmpfname = tempnam ("/tmp", "FOO");
10.22.62 tmpfile
int tmpfile (void)
crée un fichier temporaire
avec un nom unique, ouvert en écriture, et retourne un
pointeur de fichier, identique à ceux retourné par
fopen().
Ce fichier sera automatiquement effacé lorsqu'il sera
fermé (avec fclose()), ou lorsque le fichier
sera termniné.
10.22.63 touch
int touch (string filename, int time)
touch() tente de forcer la date de modification du fichier
nommé filename à la date de time.
Si time est omis, c'est l'heure courante qui est utilisée.
if ( touch($FileName) ) { print "$FileName modification time has been changed to todays date et time"; } else { print "Sorry Could Not change modification time of $FileName"; }
10.22.64 umask
int umask (int mask)
umask() change le umask de PHP : mask & 0777 et retourne le
vieux umask. Lorsque PHP est utilisé comme module de serveur, le umask reprend
sa valeur à la fin de chaque script.
10.22.65 unlink
int unlink (string filename)
unlink() efface filename.
Identique à la fonction Unix C unlink().
10.23 FTP
FTP : File Transfer Protocol. 10.23.1 ftp_connect
int ftp_connect (string host, int port )
Retourne un flot FTP en cas de succès, et FALSEsinon. 10.23.2 ftp_login
int ftp_login (int ftp_stream, string username, string password)
Retourne TRUE en cas de succès, et FALSE sinon.
10.23.3 ftp_pwd
int ftp_pwd (int ftp_stream)
Retourne le nom du dossier courant, ou FALSE en cas d'erreur. 10.23.4 ftp_cdup
int ftp_cdup (int ftp_stream)
Retourne TRUE en cas de succès, et FALSE sinon.
10.23.5 ftp_chdir
int ftp_chdir (int ftp_stream, string directory)
Retourne TRUE en cas de succès, et FALSE sinon.
10.23.6 ftp_mkdir
string ftp_mkdir (int ftp_stream, string directory)
Retourne le nom du dossier ainsi créé en cas de succès, et FALSE sinon.
10.23.7 ftp_rmdir
int ftp_rmdir (int ftp_stream, string directory)
Retourne TRUE en cas de succès, et FALSE sinon.
10.23.8 ftp_nlist
int ftp_nlist (int ftp_stream, string directory)
Retourne un tableau de nom de fichiers en cas de succès, et FALSE sinon.
10.23.9 ftp_rawlist
int ftp_rawlist (int ftp_stream, string directory)
ftp_rawlist() exécute la commande FTP LIST, et retourne le
résultat dans un tableau. Chaque élément du tableau correspond à une ligne
du résultat de la commande. Le résultat n'est pas analysé, et est retourné brut.
L'identifiant de système retourné par ftp_systype() sera utile
pour déterminer la façon d'interpréter le résutltat.
10.23.10 ftp_systype
int ftp_systype (int ftp_stream)
Retourne le type de serveur, ou FALSE en cas d'erreur. 10.23.11 ftp_pasv
int ftp_pasv (int ftp_stream, int pasv)
Retourne TRUE en cas de succès, et FALSE sinon. 10.23.12 ftp_get
int ftp_get (int ftp_stream, string local_file, string remote_file, int mode)
Retourne TRUE en cas de succès, et FALSE sinon.
10.23.13 ftp_fget
int ftp_fget (int ftp_stream, int fp, string remote_file, int mode)
Retourne TRUE en cas de succès, et FALSE sinon. 10.23.14 ftp_put
int ftp_put (int ftp_stream, string remote_file, string local_file, int mode)
Retourne TRUE en cas de succès, et FALSE sinon. 10.23.15 ftp_fput
int ftp_fput (int ftp_stream, string remote_file, int fp, int mode)
Retourne TRUE en cas de succès, et FALSEsinon. 10.23.16 ftp_size
int ftp_size (int ftp_stream, string remote_file)
Retourne la taille du fichier en cas de succès, et FALSE sinon.
10.23.17 ftp_mdtm
int ftp_mdtm (int ftp_stream, string remote_file)
Retourne un UNIX timestamp en cas de succès, et FALSEsinon. 10.23.18 ftp_rename
int ftp_rename (int ftp_stream, string from, string to)
Retourne TRUE en cas de succès, et FALSE sinon. 10.23.19 ftp_delete
int ftp_delete (int ftp_stream, string path)
Retourne TRUE en cas de succès, et FALSEsinon. 10.23.20 ftp_site
int ftp_site (int ftp_stream, string cmd)
Retourne TRUE en cas de succès, et FALSE sinon. 10.23.21 ftp_quit
int ftp_quit (int ftp_stream)
ftp_connect() ferme la connexion
ftp_stream.
10.24 Fonctions
Ces fonctions effectuent les manipulations liées à la gestions des fonctions.
10.24.1 call_user_func
mixed call_user_func (string function_name , mixed parameter , mixed ... ) Appelle la fonction utilisateur function_name, et lui passe les paramètres parameter. Par exemple : function barbier ($type) { print "Vous vouliez une coupe $type, pas de problème"; } call_user_func ('barbier', "iroquois"); call_user_func ('barbier', "militaire"); call_user_func ('barbier', "au bol");
10.24.2 create_function
string create_function (string args, string code)
Cette fonction crée une fonction anonyme, à partir des paramètres passés,
et retourne un nom unique. Généralement, les arguments
args sont présentés sous la forme d'une
chaîne à guillemets simples, et la même recommandation vaut pour
code. La raison de l'utilisation des guillemets simples
est de proteger les noms de variables du remplacement par leur valeur.
Si vous utilisez les guillemets doubles, n'oubliez pas d'échapper les noms
de variables (i.e. \$avar).
$newfunc = create_function('$a,$b','return "ln($a) + ln($b) = ".log($a * $b);'); echo "Nouvelle fonction anonyme : $newfunc\n"; echo $newfunc(2,M_E)."\n"; // affichera : // Nouvelle fonction anonyme : lambda_1 // ln(2) + ln(2.718281828459) = 1.6931471805599 Ou, pour pouvoir appliquer une fonction générique à une liste d'arguments. traitement générique par fonction avec create_function() traitement générique par fonction avec create_function() function process($var1, $var2, $farr) { for ($f=0; $f < count($farr); $f++) echo $farr[$f]($var1,$var2)."\n"; } // creation d'une série de fonction mathématiques $f1 = 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}'; $f2 = "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);"; $f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b;} else {return false;}'; $farr = array( create_function('$x,$y', 'return "un peu de trigo : ".(sin($x) + $x*cos($y));'), create_function('$x,$y', 'return "une hypoténuse: ".sqrt($x*$x + $y*$y);'), create_function('$a,$b', $f1), create_function('$a,$b', $f2), create_function('$a,$b', $f3) ); echo "\nUtilisation de la première liste de fonctions anonymes\n"; echo "paramétres: 2.3445, M_PI\n"; process(2.3445, M_PI, $farr); // Maintenant une liste de fonction sur chaîne de caractères $garr = array( create_function('$b,$a','if (strncmp($a,$b,3) == 0) return "** \"$a\" '. 'et \"$b\"\n** Ces chaînes de ressemblent!! (regarde les trois premiers caractères)";'), create_function('$a,$b','; return "CRCs: ".crc32($a)." , ".crc32(b);'), create_function('$a,$b','; return "similarité(a,b) = ".similar_text($a,$b,&$p)."($p%)";') ); echo "\nUtilisation de la secondes liste de fonctions anonymes\n"; process("Twas brilling and the slithy toves", "Twas the night", $garr); Et lorsque vous utilisez le code ci dessus, l'affichage va être Utilisation de la première liste de fonctions anonymes paramétres: 2.3445, M_PI Un peu de trigo: -1.6291725057799 Une hypoténuse: 3.9199852871011 b*a^2 = 4.8103313314525 min(b^2+a, a^2,b) = 8.6382729035898 ln(a/b) = 0.27122299212594 Utilisation de la seconde liste de fonctions anonymes ** "Twas the night" and "Twas brilling and the slithy toves" ** Ces chaînes de ressemblent!! (regarde les trois premiers caractères) CRCs: -725381282 , 1908338681 similarité(a,b) = 11(45.833333333333%) Mais l'utilisation la plus courante des fonctions lambda est la fonction de callback, par exemple lors de l'utilisation de array_walk() ou usort() Utilisation de fonctions anonymes comme fonction de callback $av = array("la ","une ","cette ","une certaine "); array_walk($av, create_function('&$v,$k','$v = $v."maison";')); print_r($av); // En PHP3 utilisez var_dump() // affiche: // Array // ( // [0] => la maison // [1] => une maison // [2] => cette maison // [3] => une certaine maison // ) // un tableau de chaîne classé par taille $sv = array("petite","moyenne","tres longue","vraiment tres longue"); print_r($sv); // affiche: // Array // ( // [0] => petite // [1] => moyenne // [2] => tres longue // [3] => vraiment tres longue // ) // Tri par ordre de taille décroissant usort($sv, create_function('$a,$b','return strlen($b) - strlen($a);')); print_r($sv); // outputs: // Array // ( // [0] => vraiment tres longue // [1] => tres longue // [2] => moyenne // [3] => petite // )
10.24.3 func_get_arg
mixed func_get_arg (int arg_num)
Retourne l'argument à la position arg_num dans
la liste d'argument d'une fonction utilisateur. Les arguments sont
comptés en commencant à zéro. func_get_arg() générera une
alerte si elle est appelée hors d'une fonction.
<?php function foo() { $numargs = func_num_args(); echo "Nombre d'arguments: $numargs<br>\n"; if ($numargs >= 2) { echo "Le second argument est: " . func_get_arg (1) . "<br>\n"; } } foo (1, 2, 3); ?>
10.24.4 func_get_args
array func_get_args (void )
Retourne un tableau dont les éléments correspondent aux éléments de la liste
d'arguments de la fonction. func_get_args() générera une
alerte si elle est appelée hors d'une fonction.
<?php function foo() { $numargs = func_num_args(); echo "Nombre d'arguments: $numargs<br>\n"; if ($numargs >= 2) { echo "Le second argument est: " . func_get_arg (1) . "<br>\n"; } $arg_list = func_get_args(); for ($i = 0; $i < $numargs; $i++) { echo "L'argument $i est: " . $arg_list[$i] . "<br>\n"; } } foo (1, 2, 3); ?>
10.24.5 func_num_args
int func_num_args (void )
Retourne le nombre d'arguments passé à la fonction utilisateur courante.
func_num_args() générera une alerte si elle est appelée
hors d'une fonction.
<?php function foo() { $numargs = func_num_args(); echo "Nombre d'arguments: $numargs\n"; } foo (1, 2, 3); // affiche 'Nombre d'arguments: 3' ?>
10.24.6 function_exists
int function_exists (string function_name)
Vérifie la liste des fonctions définies par l'utilisateur, et retourne
true si function_name y est trouvé, false sinon.
10.24.7 register_shutdown_function
int register_shutdown_function (string func)
Enregistre la fonction func pour exécution à l'extinction
du script. 10.25 Fonctions GNU Gettext
10.25.1 bindtextdomain
string bindtextdomain (string domain, string directory)
bindtextdomain() fixe le chemin du domaine
domain à directory.
10.25.2 dcgettext
string dcgettext (string domain, string message, int category)
dcgettext() permet de remplacer le domaine courant
lors de la rechrche d'un message. Elle permet aussi de spécifier une catégorie.
10.25.3 dgettext
string dgettext (string domain, string message)
dgettext() remplace le domaine courant.
10.25.4 gettext
string gettext (string message)
gettext() retourne une chaîne traduite, si elle en a trouvé une
dans la table de traduction, ou bien le message message,
s'il n'a pas été trouvé. Vous pouvez utiliser le caractère souligné (_) comme
alias de cette fonction.
<?php // Choix l'allemand putenv ("LANG=de"); // Spécifie la localisation des tables de traduction bindtextdomain ("myPHPApp", "./locale"); // Choisi le domaine textdomain ("myPHPApp"); // Affiche un message de test print (gettext ("Bienvenue sur mon application PHP")); ?> 10.25.5 textdomain
int textdomain (string library )
textdomain() fixe le domaine à utiliser lors de recherche
avec gettext(). Ce domaine dépend généralement de l'application.
Le domaine par défaut précédent est retourné. Appelez cette fonction sans paramètre
pour avoir la valeur courante, sans la modifier.
10.26 HTTP
Ces fonctions permettent de travailler sur les informations transmises au navigateur,
via le protocole HTTP.
10.26.1 header
int header (string string)
La fonction header() permet de spécifier un entête HTTP lors
de l'envoi des fichiers HTML. Reportez vous à HTTP 1.1
Specification pour plus d'informations sur les entêtes HTTP. NB : la
fonction header() doit être appelée avant la première balise
HTML, et avant n'importe quel envoi de commande PHP. C'est une erreur très
courante que de lire du code avec la fonction include() ou
avec auto_prepend et d'avoir des espace ou des lignes vides dans ce code qui
produisent un début de sortie avant que header() n'ai été appelé.
header("Location: http://www.php.net"); /* Redirige le client vers le site PHP */ exit; /* Assure que le code ci dessous n'est jamais exécuté. */
header("http/1.0 404 Not Found");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date du passé header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // toujours modifié header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1 header("Pragma: no-cache"); // HTTP/1.0
10.26.2 header_sent
boolean headers_sent (void)
headers_sent() retourne TRUE si les
entêtes HTTP ont déjà été envoyés, et false sinon.
10.26.3 setcookie
int setcookie (string name, string value, int expire, string path, string domain, int secure)
setcookie() définit un cookie qui sera envoyé avec le reste
des entêtes. Les cookies doivent passer avant tout autre entête (c'est une restriction
des cookies, pas de PHP). Cela vous impose d'appeler cette fonction avant toute
balise <html> ou <head>.
setcookie("TestCookie","Test Value"); setcookie("TestCookie",$value,time()+3600); /* expire in 1 hour */ setcookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1);
echo $TestCookie; echo $HTTP_COOKIE_VARS["TestCookie"];
setcookie( "cookie[three]", "cookiethree" ); setcookie( "cookie[two]", "cookietwo" ); setcookie( "cookie[one]", "cookieone" ); if ( isset( $cookie ) ) { while( list( $name, $value ) = each( $cookie ) ) { echo "$name == $value<br>\n"; } }
10.27 Hyperwave
10.27.1 Introduction
Hyperwave a été developpé par
IICM à Graz. Son nom original était
Hyper-G et il a pris le nom de Hyperwave lors de sa
commercialisation (en 1996, si mes souvenirs sont bons).
10.27.2 Intégration avec Apache
L'extension Hyperwave est utilisée de manière optimale lorsqu PHP est compilé
comme module Apache. Dans ce cas, le serveur Hyperwave sous jacent peut être
caché quasiment totalement aux utilisateurs, si Apache utilise son moteur d'écriture.
Les explications suivantes vous éclaireront :
RewriteRule ^/(.*) /usr/local/apache/htdocs/HyperWave/$1 [L] Maintenant toutes les URL pointent sur un objet Hyperwave. Cela conduit à un problème simple. Il n'y a pas d'autre façon d'exécuter, c'est à dire rechercher, un autre script que ce script 'Hyperwave'. Cela pourra être corrigé avec une autre règle telle que: RewriteRule ^/hw/(.*) /usr/local/apache/htdocs/hw/$1 [L] Le dossier `/usr/local/apache/htdocs/hw' sera ainsi reservé pour d'autres scripts et fichiers. Assurez vous que cette règle est évaluée avant la première règle que nous avons définie. Il y a juste un léger inconvénient : tous les objets Hyperwave qui commencent par 'hw/' seront cachés. Alors, assurez vous que vous n'utilisez pas de tels noms. Si vous avez besoin d'autres dossiers, par exemple, un dossier d'images, ajoutez simplement d'autres règles. N'oubliez pas de lancer le moteur de réécriture avec RewriteEngine on Mon expérience m'a montré que vous aurez besoin des scripts suivants :
10.27.3 A faire
Il reste encore beaucoup à faire :
10.27.4 hw_Array2Objrec
strin hw_array2objrec (array object_array)
Converti un object_array en un objet.
Les attributs multiples tels que 'Title' en différentes langues seront traités
correctement.
10.27.5 hw_Children
array hw_children (int connection, int objectID)
Retourne un tableau avec des object ids. Chaque object id est celui d'un des fils du
groupe dont l'id est objectID.
Ce tableau contient tous les fils, documents et groupes.
10.27.6 hw_ChildrenObj
array hw_childrenobj (int connection, int objectID)
Retourne un tableau avec des object records. Chaque object records est celui d'un des
fils du groupe dont l'id est objectID.
Ce tableau contient tous les fils, documents et groupes
10.27.7 hw_Close
int hw_close (int connection)
Retourne false si la connexion n'est pas valide, et sinon, true. Ferme la connexion connection à un serveur Hyperwave. 10.27.8 hw_Connect
int hw_connect (string host, int port, string username, string password)
Ouvre une connexion Hyperwave et retourne un identifiant de connexion, en cas de succès,
ou false, si la connexion n'a pas pu être créée. Chaque argument doit être entouré de
guillemets, sauf le numéro de port. Les arguments username et
password sont optionnels, et peuvent être ignorés. Dans ce
cas, aucune identification ne sera faite au niveau du serveur. Cela revient à s'identifier en tant qu'utilisateur anonyme. Cette fonction retourne un identifiant de connexion qui sera nécessaire aux autres fonctions Hyperwave. Vous pouvez avoir plusieurs connexions simultanées. N'oubliez pas que les mots de passe ne sont pas cryptés.
10.27.9 hw_Cp
int hw_cp (int connection, array object_id_array, int destination id)
Copie les objet ayant les objects id object_id_array, et crée un groupe ayant l'object id destination id. 10.27.10 hw_Deleteobject
int hw_deleteobject (int connection, int object_to_delete)
Efface l'objet dont l'identifiant est object_to_delete. Toutes les instances de l'objets seront effacées.
10.27.11 hw_DocByAnchor
int hw_docbyanchor (int connection, int anchorID)
Retourne l'dentifiant d'objet de l'objet dans l'ancrage anchorID. 10.27.12 hw_DocByAnchorObj
string hw_docbyanchorobj (int connection, int anchorID)
Retourne les attributs du document qui correspond à anchorID. 10.27.13 hw_DocumentAttributes
string hw_documentattributes (int hw_document)
Retourne les attributs du document. 10.27.14 hw_DocumentBodyTag
string hw_documentbodytag (int hw_document)
Retourne la balise BODY du document.Si le document est un document HTML , la balise BODY doit être affichée avant le document. 10.27.15 hw_DocumentContent
string hw_documentcontent (int hw_document)
Retourne la balise BODY du document.Si le document est un document HTML , la balise BODY doit être affichée avant le document. 10.27.16 hw_DocumentSetContent
string hw_documentsetcontent (int hw_document, string content)
Modifie/remplace le contenu d'un document. Si le document est un document HTML, le contenu représente tout qui est placé au dela de la balise BODY. Les informations de HEAD et de la balise BODY sont enregistrés dans les attributs. Si vous fournissez aussi ces informations dans le corps du document, le serveur Hyperwave modifiera les attributs. Cela n'est cependant pas une bonne idée. Si la fonction échoue, l'ancien contenu est restauré.
10.27.17 hw_DocumentSize
int hw_documentsize (int hw_document)
Retourne la taille du document en octets. 10.27.18 hw_ErrorMsg
string hw_errormsg (int connection)
Retourne une chaîne contenant le dernier message d'erreur, ou 'No Error' (pas d'erreur). Si false est retourné, cette fonction a échoué. Ce message est relatif à la dernière commande exécutée. 10.27.19 hw_EditText
int hw_edittext (int connection, int hw_document)
Charge le texte du document sur le serveur. Les attributs du document ne doivent pas être modifiés tant que le document est en train d'être édité. Cette fonction n'est disponible que sur les documents texte. Elle n'ouvrira pas de canal de transfert, et donc, bloquera le script durant le transfert.
10.27.20 hw_Error
int hw_error (int connection)
Retourne le code d'erreur de la dernière erreur. Si la valeur 0 est retournée, c'est qu'il n'y avait pas d'erreur. L'erreur se rapporte à la dernière commande. 10.27.21 hw_Free_Document
int hw_free_document (int hw_document)
Détruit un document Hyperwave. 10.27.22 hw_GetParents
array hw_getparentsobj (int connection, int objectID)
Retourne un tableau indexé avec les identifiants des objets parents de objectID. 10.27.23 hw_GetParentsObj
array hw_getparentsobj (int connection, int objectID)
Retourne un tableau indexé, avec les attributs et un tableau associé, d'informations statistiques à propos des attributs. Ce tableau associé est le dernier élément du tableau retourné. Chaque
attribut appartient au père de l'objet objectID. 10.27.24 hw_GetChildColl
array hw_getchildcoll (int connection, int objectID)
Retourne un tableau contenant les identifiants d'objets des groupes fils du
groupe objectID. Cette fonction ne retournera pas d'identifiants
d'objets des documents fils. 10.27.25 hw_GetChildCollObj
array hw_getchildcollobj (int connection, int objectID)
Retourne un tableau d'object record. Chaque object records appartient à un groupe d'enfants
de la collection objectID. La fonction ne retournera pas
de documents enfants. 10.27.26 hw_GetRemote
int hw_getremote (int connection, int objectID)
Retourne un document distant. Les documents distants sont , en Hyperwave, des documents
lus depuis une source externe. La plus part des documents éloignés sont des pages web
externes, ou des requêtes sur une base de données. Afin de pouvoir accéder à des sources
externes, grâce aux documents distants, Hyperwave introduit l'interface HGI (Hyperwave
Gateway Interface) qui est similaire à CGI. Actuellement, seuls les protocoles de ftp,
http et certaines bases de données sont accessibles avec HGI. hw_getremote()
retourne le document de la source distante. Si vous voulez utiliser cette fonction, il vous faut vous familiariser HGIs. Il est aussi préférable d'utiliser PHP plutôt que Hyperwave pour accéder aux sources externes. Le support des bases de données sera plus difficile avec Hyperwave que PHP.
10.27.27 hw_GetRemoteChildren
int hw_getremotechildren (int connection, string object record)
Retourne les fils d'un document distant. Les fils d'un document distant sont des
documents distants eux mêmes. Cela est cohérent si une requête sur une base de données
doit être rendu plus sélective, comme expliqué dans Hyperwave Programmers' Guide.
Si le nombre de fils est 1 la fonction va retourner le document lui même, la fonction
retournera le document lui même, formaté Hyperwave Gateway Interface (HGI). Si
le nombre de fils est supérieur 1 la fonction retournera un tableau d'attributs,
qui pourra servir à une nouvelle requête avec hw_getremotechildren().
Ces attributs sont virtuels et n'existent pas sur le serveur Hyperwave, et ainsi, n'ont pas d'identifiant d'objet valide. L'ordre exact de ces objets est du ressort de HGI. Si vous voulez utiliser cette fonction, vous devez être très familier HGIs. Il vaut mieux PHP plutôt que Hyperwave pour accéder aux fichiers distants. Le support de base de données y est bien meilleur.
10.27.28 hw_GetSrcByDestObj
array hw_getsrcbydestobj (int connection, int objectID)
Retourne les attributs de tous les ancrages qui pointent sur objectID.
L'objet peut être un document ou un autre ancrage, de type destination.
10.27.29 hw_GetObject
array hw_getobject (int connection, [int)array] objectID, string query|
Retourne les attributs de l'objet dont l'identifiant est objectID,
si le second paramètre est un entier. Si le second paramètre est un tableau, la fonction retournera un tableau d'attributs. Dans ce cas, le dernier paramètre est aussi évalué.
10.27.30 hw_GetAndLock
string hw_getandlock (int connection, int objectID)
Retourne les attributs, et verrouille l'objet objectID.
Le verrouillage empêchera les autres utilisateurs d'y accéder, jusqu'à ce qu'il soit deverrouillé.
10.27.31 hw_GetText
int hw_gettext (int connection, int objectID, mixed rootID/prefix )
Retourne le document de l'objet objectID. Si le document possède
des ancrages qui peuvent être insérés, ils seront déjà insérés.
L'option rootID/prefix peut être une chaîne ou un entier. Si c'est un entier, il
détermine la méthode d'insertion des liens dans le document. Par défaut, il vaut 0 et
les liens seront construits en fonction du nom de l'objet cible. Cela sert beaucoup
dans les applications web. Si un lien pointe sur un objet avec le nom
'film_internet' le lien HTML sera <A HREF="/internet_movie">.
La position réelle de la source et de la cible dans la hiérarchie seront ignorés. Vous devrez modificer votre site web pour qu'il réécrive les URL, comme par exemple '/mon_script.php3/film_internet'. 'mon_script.php3' devra analyser $PATH_INFO et savoir recherche le document '/mon_script.php3/film_internet'. Si vous ne voulez pas de ce comportement, vous pouvez affecter à rootID/prefix n'importe quel prefixe. Dans ce cas, ce sera une chaîne.
10.27.32 hw_GetObjectByQuery
array hw_getobjectbyquery (int connection, string query, int max_hits)
Recherche un objet sur tout le serveur et retourne un tableau d' object ids.
Le nombre maximum d'objet est limité par max_hits.
Si max_hits vaut -1 il n'y a pas de limite. 10.27.33 hw_GetObjectByQueryObj
array hw_getobjectbyqueryobj (int connection, string query, int max_hits)
Recherche un objet sur tout le serveur et retourne un tableau d' object records.
Le nombre maximum d'objet est limité par max_hits. Si max_hits
vaut -1 il n'y a pas de limite.
10.27.34 hw_GetObjectByQueryColl
array hw_getobjectbyquerycoll (int connection, int objectID, string query, int max_hits)
Recherche un objet sur tout le groupe objectID et retourne un tableau d' object records.
Le nombre maximum d'objet est limité par objectID. Si objectID
vaut -1 il n'y a pas de limite.
10.27.35 hw_GetObjectByQueryCollObj
array hw_getobjectbyquerycollobj (int connection, int objectID, string query, int max_hits)
Recherche un objet sur tout le groupe objectID et retourne un tableau d' object records.
Le nombre maximum d'objet est limité par objectID. Si objectID
vaut -1 il n'y a pas de limite. 10.27.36 hw_GetChildDocColl
array hw_getchilddoccoll (int connection, int objectID)
Retourne un tableau avec les id des documents fils d'une collection. 10.27.37 hw_GetChildDocCollObj
array hw_getchilddoccollobj (int connection, int objectID)
Retourne un tableau contenant les attributs des documents fils du groupe objectID. 10.27.38 hw_GetAnchors
array hw_getanchors (int connection, int objectID)
Retourne un tableau contenant les identifiants des ancrages du document objectID. 10.27.39 hw_GetAnchorsObj
array hw_getanchorsobj (int connection, int objectID)
Retourne un tableau d'attributs des ancrages du document objectID. 10.27.40 hw_Mv
int hw_mv (int connection, array object id array, int source id, int destination id)
Déplaces les objets dont les identifiants sont passés dans le tableau source id,
depuis le source id dans le destination id.
Si destination id vaut 0, les objets ne seront plus insérés dans le groupe (ni dans le serveur). Dans ce cas, si une instance était la dernière instance d'un objet, l'objet sera effacé. Si vous voulez effacer toutes les instances d'un coup, utilisez hw_deleteobject().
10.27.41 hw_Identify
int hw_identify (string username, string password)
Identifies un utilisateur, dont le nom d'utilisateur est username and
et le mot de passe password. L'identification n'est valide
que pour la session en cours. Je ne pense pas que cette fonction serve souvent. Dans la plus part des cas, il est plus simple de s'identifier lors de l'ouverture de la connexion.
10.27.42 hw_InCollections
array hw_incollections (int connection, array object_id_array, array collection_id_array, int return_collections)
Vérifie qu'un ensemble d'objet (documents ou groupes) donnés par object_id_array
fait partie des groupe listés par object_id_array.
Lorsque le quatrième paramètre return_collections vaut 0, le
sous ensemble d'identifiant qui font partie d'un groupe (i.e. les documents ou groupes qui sont fils d'un ou plusieurs groupe, ou leurs fils, récurusivement) est retourné sous la forme d'un tableau. Cette option permet de mettre en valeur la partie de l'arborescence qui contient le résultat d'une requête, dans un sens graphique.
10.27.43 hw_Info
string hw_info (int connection)
Retourne les informations de la connexion courante. La chaîne retournée a le format suivant : <Serverstring>, <Host>,
<Port>, <Username>, <Port of Client>,
<Byte swapping> 10.27.44 hw_InsColl
int hw_inscoll (int connection, int objectID, array object_array)
Insère un nouveau groupe, avec les attributs object_array dans le groupe
objectID. 10.27.45 hw_InsDoc
int hw_insdoc (int connection, int parentID, string object_record, string text)
Insère un nouveau document avec les attributs object_record,
dans le groupe parentID. Cette fonction insère soit un objet
avec ses seuls attributs, soit pur objet ascii, avec text si il est fourni.
Si vous voulez insérer un document de type général, utilisez plutôt
hw_insertdocument(). 10.27.46 hw_InsertDocument
int hw_insertdocument (int connection, int parent_id, int hw_document)
Insère un document dans le groupe parent_id. Le document doit
avoir été créé auparavant avec hw_new_document(). Assurez vous que
les attributs du nouveau document contiennent au moins les attributs suivants :
Type, DocumentType, Title et Name. Vous aurez aussi parfois besoin de MimeType. La fonction retourne l'identifiant de l'objet inséré, ou bien false.
10.27.47 hw_InsertObject
int hw_insertobject (int connection, string object rec, string parameter)
Insère un objet dans le serveur. L'objet peut être n'importe quel objet Hyperwave valide. Reportez vous à la documentation HG-CSP pour plus de détails sur les paramètres. 10.27.48 hw_mapid
int hw_mapid (int connection, int server id, int object id)
Represente l'id d'un objet global de n'importe quel serveur Hyperwave, même si
vous ne vous y êtes pas connecté avec hw_connect(),
avec un id d'objet local virtuel. Cet id d'objet local peut alors être utilisé comme n'importe quel
id d'objet : par exemple on peut obtenir l'enregistrement d'objet avec la fonction
hw_getobject(). L'id du serveur est la première partie
de l'id global (GOid) de l'objet, qui est en fait une adresse IP. 10.27.49 hw_Modifyobject
int hw_modifyobject (int connection, int object_to_change, array remove, array add, int mode)
Cette commande permet d'effacer, d'ajouter ou de modifier des attributs d'un objet.
L'objet est reperé par son identifiant object_to_change.
Le premier tableau, remove, est la liste des attributs à effacer. Le deuxième tableau add est la
liste des attributs à ajouter. Afin de modifier un attribut, il vous faudra dont l'effacer,
puis l'ajouter à nouveau. hw_modifyobject() effacera toujours les
attributs avant de les ajouter, à moins que la valeur de l'attribut à effacer ne
soit pas une chaîne, ou un tableau. // $connect est une connexion valide // $objid est l'identifiant de l'objet $remarr = array("Name" => "books"); $addarr = array("Name" => "articles"); $hw_modifyobject($connect, $objid, $remarr, $addarr); Afin d'effacer/ajouter une paire nom=valeur aux attributs d'un objet, utilisez simplement les tableaux d'effacement et d'ajout, et laissez le dernier/troisième paramètre vide. Si l'attribut est le premier de ce nom à ajouter, donnez une valeur entière à cet élément. Ajouter un nouvel attribut // $connect is an existing connection to the Hyperwave server // $objid is the ID of the object to modify $remarr = array("Name" => 0); $addarr = array("Name" => "articles"); $hw_modifyobject($connect, $objid, $remarr, $addarr);
$remarr = array("Title" => "en:Books"); $addarr = array("Title" => "en:Articles"); $hw_modifyobject($connect, $objid, $remarr, $addarr); $remarr = array("Title" => array("en" => "Books")); $addarr = array("Title" => array("en" => "Articles", "ge"=>"Artikel")); $hw_modifyobject($connect, $objid, $remarr, $addarr); Pour supprimer l'entrée française 'Livres' et ajouter l'entrée 'Articles' et l'entrée allemande 'Artikel'. Suppression d'un attribut $remarr = array("Title" => ""); $addarr = array("Title" => "en:Articles"); $hw_modifyobject($connect, $objid, $remarr, $addarr);
Note :
Cet exemple va effacer tous les attributs avec le nom 'Title' et ajouter un nouvel attribut 'Title'. Cela peut être pratique pour effacer des attributs récursivement.
10.27.50 hw_New_Document
int hw_new_document (string object_record, string document_data, int document_size)
Retourne un nouveau document Hyperwave avec comme données document_data et comme
attributs object_record. La longueur de document_data doit être données dans
document_size. Cette fonction n'insère pas l'objet dans le serveur Hyperwave.
10.27.51 hw_Objrec2Array
array hw_objrec2array (string object_record)
Convertir les attributs object_record d'un objet en un tableau.
Les clés du tableau seront les noms des attributs. Les attributs multiples comme par exemple 'Title', dans différentes langues, seront rassemblées dans un autre tableau. Une clé est la partie gauche d'un attribut. Actuellement, seuls les attributs 'Title', 'Description' et 'Keyword' sont traités correctement.
10.27.52 hw_OutputDocument
int hw_outputdocument (int hw_document)
Affiche hw_document sans la balise BODY. 10.27.53 hw_pConnect
int hw_pconnect (string host, int port, string username, string password)
Retourne un index de connexion en cas de succès, et false si la connexion n'a pas pu
être créée. Ouvre une connexion persistante à un serveur Hyperwave. Tous les arguments
doivent être entre guillemets, hormis le numéro de port (port). Les arguments
username
et password sont optionnels, et peuvent être ignorés. Dans ce cas, aucune authentification ne sera faites, (connexion anonyme). Cette fonction retourne un index de connexion qui sera utilisée par les autres fonctions Hyperwave. Vous pouvez ouvrir plusieurs connexions simultanées.
10.27.54 hw_PipeDocument
int hw_pipedocument (int connection, int objectID)
Retourne le document Hyperwave d'objet id objectID.
Si le document a des ancrages, ils seront insérés. Le document sera transmis via
une connexion de données spéciale, qui ne bloque pas la connexion de contrôle (ie, le serveur n'attend pas la fin du transfert pour rendre la main).
10.27.55 hw_Root
int hw_root ()
Retour l' Object id de la racine. Actuellement, cette identifiant est toujours 0. L'ensemble des fils de la racine est celui du serveur courant.
10.27.56 hw_Unlock
int hw_unlock (int connection, int objectID)
Déverrouille un document, et laisse l'accès aux autres utilisateurs. 10.27.57 hw_Who
int hw_who (int connection)
Retourne un tableau contenant la liste des utilisateurs actuellement connectés au serveur Hyperwave. Chaque élément du tableau est lui même un tableau, qui contient l'identifiant de l'élément, le nom, le système, la date de connexion (onSinceDate), l'heure de connexion (onSinceTime), la durée de connexion (TotalTime ) et self. 'self' contient 1 l'élément est l'utilisateur qui a appelé la fonction.
10.27.58 hw_Username
string hw_getusername (int connection)
Retourne le nom d'utilisateur utilisé par la connexion. 10.28 InterBase
Interbase est une base de données populaire, créée par Borland/Inprise.
Pour plus d'informations sur Interbase, allez à
http://www.interbase.com.
Par ailleurs, Interbase vient de rejoindre le mouvement Open Source!
10.28.1 ibase_connect
int ibase_connect (string database, string username , string password ) Ouvre une connexion à une base de données Interbase. Exemple avec ibase_connect() $dbh = ibase_connect ($host, $username, $password); $stmt = 'SELECT * FROM tblname'; $sth = ibase_query ($dbh, $stmt); while ($row = ibase_fetch_object ($sth)) { print $row->email . "\n"; } ibase_close ($dbh);
10.28.2 ibase_pconnect
int ibase_connect (string database, string username , string password )
Ouvre une connexion persistante à une base de données Interbase.
10.28.3 ibase_close
int ibase_close (int connection_id )
Ferme une connexion à une base de données Interbase. Cette fonction prend comme
argument un identifiant de connexion id retourné par
ibase_connect().
10.28.4 ibase_query
int ibase_query (int link_identifier , string query , int bind_args )
Exécute une requête sur une base Interbase, et retourne un identifiant de
résultat, à utiliser avec ibase_fetch_row(),
ibase_free_result() et/ou ibase_free_query().
10.28.5 ibase_fetch_row
int ibase_fetch_row ( int result_identifier)
Retourne la prochaîne ligne spécifiée dans le résultat obtenu de ibase_query().
10.28.6 ibase_fetch_object
int ibase_fetch_object (int result_id) Lit une ligne dans une base Interbase et la place dans un pseudo objet. Cette fonction prend comme argument un identifiant de résultat obtenu de ibase_query() ou ibase_execute(). $dbh = ibase_connect ($host, $username, $password); $stmt = 'SELECT * FROM tblname'; $sth = ibase_query ($dbh, $stmt); while ($row = ibase_fetch_object ($sth)) { print $row->email . "\n"; } ibase_close ($dbh);
10.28.7 ibase_free_result
int ibase_free_result (int result_identifier)
Libère un résultat créé par ibase_query().
10.28.8 ibase_prepare
int ibase_prepare (int link_identifier , string query)
Prépare une requête pour lier les paramètres (avec ibase_bind()) et
l'éxécuter (avec ibase_execute()).
10.28.9 ibase_bind
ibase_bind ( int query)
Lie les paramètres avec une requête précédemment préparée avec
ibase_prepare().
10.28.10 ibase_execute
int ibase_execute ( int query)
Execute une requête préparée (et éventuellement liée) par
ibase_prepare() (et éventuellement
ibase_bind()).
10.28.11 ibase_free_query
ibase_free_query ( int query)
Libère la mémoire réservée par une requête préparée par
ibase_prepare().
10.28.12 ibase_timefmt
ibase_timefmt ( string format)
Fixe le format de date pour les prochaînes requêtes.
10.28.13 ibase_num_fields
int ibase_num_fields (int result_id) Retourne le nombre de lignes dans un résultat. $dbh = ibase_connect ($host, $username, $password); $stmt = 'SELECT * FROM tblname'; $sth = ibase_query ($dbh, $stmt); if ( ibase_num_rows($sth) > 0 ) { while ($row = ibase_fetch_object ($sth)) { print $row->email . "\n"; } } else { die("Aucun résultat"); } ibase_close ($dbh);
10.29 ICAP
Pour faire fonctionner ces fonctions, vous devez compiler PHP avec l'option
--with-icap. Il vous faudra aussi la librairie
icap. Récupérez la dernière version à
http://icap.chek.com/ et décompilez-la,
puis installez la.
10.29.1 icap_open
stream icap_open (stringcalendar, stringusername, stringpassword, stringoptions)
Retourn un flot ICAP en cas de succès, FALSE en cas d'erreur. 10.29.2 icap_close
int icap_close (int icap_stream, int flags)
Ferme le flot ICAP icap_stream.
10.29.3 icap_fetch_event
object icap_fetch_event (streamicap_stream, idevent id, optionsoptions)
icap_fetch_event() recherche un évenement dans le calendrier
spécifié par id.
Tous les objets de date et heure sont construits comme suit :
10.29.4 icap_list_events
array icap_list_events (stream icap_stream, datetime begin_date, datetime end_date)
Retourne un tableau d'identificants d'événéments, compris entre deux dates.
10.29.5 icap_store_event
int icap_store_event (int icap_stream, object event)
icap_store_event() enregistre un événement dans un calendrier
ICAP.
10.29.6 icap_delete_event
int icap_delete_event (int uid)
icap_delete_event() efface l'événement d'identifiant uid.
10.29.7 icap_snooze
int icap_snooze (int uid)
icap_snooze() éteind l'alarme de l'événement identifié par
l'UID uid. 10.29.8 icap_list_alarms
array icap_list_alarms (stream icap_stream, datetime alarm_date)
Retourne un tableau d'identifiants, qui ont une alarme de prévue à la date
alarm_date.
10.30 Informix
Le pilote d'accès à Informix pour Online (ODS) 7.x, SE 7.x et Universal Server
(IUS) 9.x est implémenté dans "functions/ifx.ec" et "functions/php3_ifx.h". Le
support ODS 7.x est plutôt complet, et accepte les colonnes de type BYTE et TEXT.
Le support IUS 9.x est partiellment fini, de nouveau types sont disponibles, mais
SLOB et CLOB sont toujours en développement.
10.30.1 ifx_connect
int ifx_connect (string database , string userid , string password )
Retourne un identifiant de connexion, en cas de succès, et FALSE sinon.
$conn_id = ifx_pconnect ("mydb@ol_srv1", "imyself", "mypassword");
10.30.2 ifx_pconnect
int ifx_pconnect (string database , string userid , string password )
Retourne un identifiant positif de connexion Informix, ou FALSE, en cas d'erreur.
10.30.3 ifx_close
int ifx_close (int link_identifier )
Retourne toujours TRUE.
$conn_id = ifx_connect ("mydb@ol_srv", "itsme", "mypassword"); ... some queries and stuff ... ifx_close($conn_id);
10.30.4 ifx_query
int ifx_query (string query, int link_identifier , int cursor_type , mixed BLOBidarray )
Retourne un identifiant positif de résultat Informix en cas de succès, et
FALSE en cas d'erreur.
ifx_textasvarchar(1); // Utilisation du mode "text mode" pour les BLOBs $res_id = ifx_query("select * from orders", $conn_id); if (! $res_id) { printf("Impossible de selectionner des lignes dans : %s\n<br>%s<br>\n", ifx_error()); ifx_errormsg(); die; } ifx_htmltbl_result($res_id, "border=\"1\""); ifx_free_result($res_id); Insertion de valeurs dans la table "catalogue" // créer un identifiant de BLOB pour une colonne de type BYTE et une de type TEXT $textid = ifx_create_blob(0, 0, "Text column in memory"); $byteid = ifx_create_blob(1, 0, "Byte column in memory"); // store BLOB id's in a BLOBid array $BLOBidarray[] = $textid; $BLOBidarray[] = $byteid; // launch query $query = "insert into catalog (stock_num, manu_code, " . "cat_descr,cat_picture) values(1,'HRO',?,?)"; $res_id = ifx_query($query, $conn_id, $BLOBidarray); if (! $res_id) { ... erreur ... } // libération du résultat ifx_free_result($res_id);
10.30.5 ifx_prepare
int ifx_prepare (string query, int conn_id, int cursor_def , mixed BLOBidarray)
Retourne un entier identifiant de résultat result_id
à utiliser avec ifx_do(). Modifie la valeur de
affected_rows, pour accès ultérieur avec
ifx_affected_rows().
10.30.6 ifx_do
int ifx_do (int result_id)
Retourne TRUE en cas de succès, FALSE en cas d'erreur.
10.30.7 ifx_error
string ifx_error
Les codes d'erreur Informix (SQLSTATE & SQLCODE) formaté comme suit :
10.30.8 ifx_errormsg
string ifx_errormsg (int errorcode )
Retourne le plus récent message d'erreur ou, lorsque l'option
errorcode est présent, le message d'erreur associé
à errorcode.
printf("%s\n<br>", ifx_errormsg(-201)); 10.30.9 ifx_affected_rows
int ifx_affected_rows (int result_id)
result_id est un identifiant valide de résultat retourné
par ifx_query() ou ifx_prepare().
$rid = ifx_prepare ("select * from emp where name like " . $name, $connid); if (! $rid) { ... error ... } $rowcount = ifx_affected_rows ($rid); if ($rowcount > 1000) { printf ("Trop de lignes trouvées (%d)\n<br>", $rowcount); die ("Ressayez avec une autre requête. <br>\n"); } 10.30.10 ifx_getsqlca
array ifx_getsqlca (int result_id)
result_id est un identifiant valide de résultat retourné
par ifx_query() ou ifx_prepare().
/* On suppose que la première colonne d'une table 'quelconque' est un numéro de série */ $qid = ifx_query("insert into sometable values(0, '2nd column', 'another column' ", $connid); if (! $qid) { ... error ... } $sqlca = ifx_getsqlca ($qid); $serial_value = $sqlca["sqlerrd1"]; echo "Le numéro de série de la valeur insérée est : " . $serial_value<br>\n"; 10.30.11 ifx_fetch_row
array ifx_fetch_row (int result_id, mixed position )
Retourne un tableau associatif qui contient la ligne retournée, ou FALSE si
il ne reste plus de lignes à lire, ou si il a eu une erreur.
$rid = ifx_prepare ("select * from emp where name like " . $name, $connid, IFX_SCROLL); if (! $rid) { ... error ... } $rowcount = ifx_affected_rows($rid); if ($rowcount > 1000) { printf ("Trop de lignes dans le résultats. (%d)\n<br>", $rowcount); die ("Recommencez votre requête. <br>\n"); } if (! ifx_do ($rid)) { ... erreur ... } $row = ifx_fetch_row ($rid, "NEXT"); while (is_array($row)) { for(reset($row); $fieldname=key($row); next($row)) { $fieldvalue = $row[$fieldname]; printf ("%s = %s,", $fieldname, $fieldvalue); } printf("\n<br>"); $row = ifx_fetch_row ($rid, "NEXT"); } ifx_free_result ($rid); 10.30.12 ifx_htmltbl_result
int ifx_htmltbl_result (int result_id, string html_table_options )
Lit toutes les lignes d'un tableau, et la met sous la forme d'un tableau HTML,
ou FALSE en cas d'erreur.
$rid = ifx_prepare ("select * from emp where name like " . $name, $connid, IFX_SCROLL); if (! $rid) { ... error ... } $rowcount = ifx_affected_rows ($rid); if ($rowcount > 1000) { printf ("Trop de lignes dans le résultat : (%d)\n<br>", $rowcount); die ("Recommencez votre requête <br>\n"); } if (! ifx_do($rid) { ... erreur ... } ifx_htmltbl_result ($rid, "border=\"2\""); ifx_free_result($rid); 10.30.13 ifx_fieldtypes
array ifx_fieldtypes (int result_id)
Retourne un tableau associatif avec les noms des champs comme clés, et les types
SQL comme valeur. En cas d'erreur, retourne FALSE.
$types = ifx_fieldtypes ($resultid); if (! isset ($types)) { ... error ... } for ($i = 0; $i < count($types); $i++) { $fname = key($types); printf("%s :\t type = %s\n", $fname, $types[$fname]); next($types); } 10.30.14 ifx_fieldproperties
array ifx_fieldproperties (int result_id)
Retourne un tableau associatif avec les nom des champs comme clé, et les données
de propriétés des champs comme valeur. Retourne FALSE en cas d'erreur.
$properties = ifx_fieldtypes ($resultid); if (! isset($properties)) { ... error ... } for ($i = 0; $i < count($properties); $i++) { $fname = key ($properties); printf ("%s:\t type = %s\n", $fname, $properties[$fname]); next ($properties); } 10.30.15 ifx_num_fields
int ifx_num_fields (int result_id)
Retourne le nombre de colonnes dans la requête result_id
ou FALSE en cas d'erreur.
10.30.16 ifx_num_rows
int ifx_num_rows (int result_id)
Compte le nombre de ligne déjà lues dans le résultat result_id
après ifx_query() ou ifx_do().
10.30.17 ifx_free_result
int ifx_free_result (int result_id)
Libère les ressources prises par le résultat result_id.
Retourne FALSE en cas d'erreur.
10.30.18 ifx_create_char
int ifx_create_char (string param)
Crée un objet char. param sera le contenu de l'objet.
10.30.19 ifx_free_char
int ifx_free_char (int bid)
Supprime l'objet char bid.
Retourne FALSE en cas d'erreur, et sinon TRUE.
10.30.20 ifx_update_char
int ifx_update_char (int bid, string content)
Modifie le contenu de l'objet char repéré par son
identifiantbid. content est une
chaîne avec les nouvelles données. Retourne. FALSE en cas d'erreur, et sinon,
TRUE.
10.30.21 ifx_get_char
int ifx_get_char (int bid)
Retourne le contenu de l'objet associé à l'identifiant bid.
10.30.22 ifx_create_blob
int ifx_create_blob (int type, int mode, string param)
Crée un objet BLOB.
10.30.23 ifx_copy_blob
int ifx_copy_blob (int bid)
Retourne FALSE en cas d'erreur, et sinon, l'identifiant du nouvel objet.
10.30.24 ifx_free_blob
int ifx_free_blob (int bid)
Supprime l'objet BLOB bid. Retourne FALSE en cas d'erreur,
et sinon TRUE.
10.30.25 ifx_get_blob
int ifx_get_blob (int bid)
Retourne le contenu de l'objet BLOB associé à bid.
10.30.26 ifx_update_blob
ifx_update_blob (int bid, string content)
Modifie le contenu de l'objet BLOB repéré par sont identifiant
bid. content est une chaîne
contenant les nouvelles données.
Retourne FALSE en cas d'erreur, et sinon, TRUE.
10.30.27 ifx_blobinfile_mode
void ifx_blobinfile_mode (int mode)
Choisi le mode par défaut des objets BLOB pour toutes les requêtes SELECT.
Mode "0" chargera les BLOB de type Byte en mémoire ;
Mode "1" sauvera les BLOB de type Byte dans un fichier.
10.30.28 ifx_textasvarchar
void ifx_textasvarchar (int mode)
Choisi le mode par défaut des objets TEXT.
Le mode "0" retournera un identifiant de BLOB
et le mode "1" retourne le BLOB sous la forme d'un (gros) varchar.
10.30.29 ifx_byteasvarchar
void ifx_byteasvarchar (int mode)
Choisi le mode par défaut des objets BYTE.
Le mode "0" retournera l'identifiant de BLOB, et
le mode "1" retourenra le contenu du text sous la forme d'un VARCHAR.
10.30.30 ifx_nullformat
void ifx_nullformat (int mode)
Choisi le mode par défaut de lecture des valeurs. Le mode "0" retourne "",
et le mode "1" retourne "NULL".
10.30.31 ifxus_create_slob
int ifxus_create_slob (int mode)
Crée un objet SLOB et l'ouvre.
Les modes valides sont : 1 = LO_RDONLY, 2 = LO_WRONLY, 4 = LO_APPEND,
8 = LO_RDWR, 16 = LO_BUFFER, 32 = LO_NOBUFFER -> ou une combinaison des
précédents. Vous pouvez aussi utiliser les constantes suivantes :
IFX_LO_RDONLY, IFX_LO_WRONLY etc. Retourne FALSE en cas d'erreur, et sinon,
l'identifiant de l'objet SLOB.
10.30.32 ifx_free_slob
int ifxus_free_slob (int bid)
Supprime un objet SLOB. bid est l'identifiant de
l'objet SLOB. Retourne FALSE en cas d'erreur, et sinon TRUE.
10.30.33 ifxus_close_slob
int ifxus_close_slob (int bid)
Ferme l'objet SLOB représenté par son identifiant bid.
Retourne FALSE en cas d'erreur, et sinon, TRUE.
TRUE.
10.30.34 ifxus_open_slob
int ifxus_open_slob (long bid, int mode)
Ouvre un objet SLOB. bid est un identifiant d'objet SLOB.
Les modes valides sont : 1 = LO_RDONLY, 2 = LO_WRONLY, 4 = LO_APPEND,
8 = LO_RDWR, 16 = LO_BUFFER, 32 = LO_NOBUFFER -> ou une combinaison des valeurs
précédentes. Retourne FALSE en cas d'erreur, et sinon, l'identifiant du
nouvel objet.
10.30.35 ifxus_tell_slob
int ifxus_tell_slob (long bid)
Retourne le fichier courant, ou la position courante d'un objet SLOB ouvert.
bid est un identifiant d'objet SLOB. Retourne FALSE en cas
d'erreur, et sinon, la position du pointeur de fichier.
10.30.36 ifxus_seek_slob
int ifxus_seek_slob (long bid, int mode, long offset)
Fixe le fichier courant, ou la position du pointeur de fichier, pour un objet
SLOB ouvert. bid est un identifiant d'objet SLOB.
Les modes valides sont : 0 = LO_SEEK_SET, 1 = LO_SEEK_CUR, 2 = LO_SEEK_END et
offset est un octet d'offset. Retourne FALSE en cas
d'erreur, et sinon, la position du pointeur de fichier.
10.30.37 ifxus_read_slob
int ifxus_read_slob (long bid, long nbytes)
Lit nbytes octets de l'objet SLOB bid.
bid est un identifiant d'objet SLOB existant, et
nbytes est le nombre d'octets à lire. Retourne FALSE en
cas d'erreur, et sinon, une chaîne de caractères.
10.30.38 ifxus_write_slob
int ifxus_write_slob (long bid, string content)
Ecrit une chaîne dans un objet SLOB. bid est un
identifiant d'objet SLOB et content sont les données à
écrire. Retourne FALSE en cas d'erreur, et sinon, le nombre d'octets écrits.
10.31 Images
Vous pouvez utiliser les fonctions PHP pour obtenir les tailles des images aux
formats JPEG, GIF, et PNG, et si vous avez la librairie GD (disponible à
http://www.boutell.com/gd/) vous pourrez aussi créer et manipuler ces
images.
10.31.1 GetImageSize
array getimagesize (string filename, array imageinfo)
getimagesize() va déterminer la taille des images de type
GIF, JPG ou PNG et en
retourner les dimensions avec le type d'image, et une chaîne type
"height/width", à placer dans une balise HTML ou
<?php $size = GetImageSize("img/flag.jpg"); ?> <IMG SRC="img/flag.jpg" <?php echo $size[3]; ?>>
<?php $size = GetImageSize("testimg.jpg",&$info); if (isset($info["APP13"])) { $iptc = iptcparse($info["APP13"]); var_dump($iptc); } ?>
Note :
Cette fonction ne requiert par la bibliothèque GD.
10.31.2 ImageArc
int imagearc (int im, int cx, int cy, int w, int h, int s, int e, int col)
imagearc() dessine une ellipse partielle, centrée sur
cx, cy, (le coin en haut à gauche
est l'origine (0,0)) dans l'image référencée par im. w et
h spécifient la largeur et la hauteur de l'ellipse, tandis
que le début et la fin de l'arc sont donnés en degrés, par les arguments
s et e.
10.31.3 ImageChar
int imagechar (int im, int font, int x, int y, string c, int col)
imagechar() dessine le premier caractère de la chaîne
c dans l'image id avec le coin
supérieur gauche placé à la position x,y
(le coin en haut à gauche est l'origine (0,0)) avec la couleur
col. Si la police est 1, 2, 3, 4 ou 5, une police intégrée
sera utilisée (plus le chiffre est grand, plus grande est la police).0
10.31.4 ImageCharUp
int imagecharup (int im, int font, int x, int y, string c, int col)
imagecharup() dessine le premier caractère de la chaîne
c dans l'image id avec le coin
supérieur gauche placé à la position x,y
(le coin en haut à gauche est l'origine (0,0)), avec la couleur
col.
Si la police est 1, 2, 3, 4 ou 5, une police intégrée sera utilisée (plus le
chiffre est grand, plus grande est la police).
10.31.5 ImageColorAllocate
int imagecolorallocate (int im, int red, int green, int blue) imagecolorallocate() retourne un identifiant de couleur, représentant la couleur composée avec les couleurs RGB (red, green, blue). L'argument im est le résultat de la fonction imagecreate(). imagecolorallocate() doit être appelée pour créer chaque couleur qui sera représentée par im. $white = ImageColorAllocate($im, 255,255,255); $black = ImageColorAllocate($im, 0,0,0);
10.31.6 ImageColorDeAllocate
int imagecolordeallocate (int im , int index ) imagecolordeallocate() désalloue une couleur précédemment allouée avec la fonction imagecolorallocate(). $white = ImageColorAllocate($im, 255, 255, 255); ImageColorDeAllocate($im, $white);
10.31.7 ImageColorAt
int imagecolorat (int im, int x, int y)
imagecolorat() retourne l'index de la couleur du pixel situé
aux coordonnées (x, y), dans l'image
im.
10.31.8 ImageColorClosest
int imagecolorclosest (int im, int red, int green, int blue)
imagecolorclosest() retourne l'index de la couleur de la
palette qui est la plus proche de la valeur RGB passée.
10.31.9 ImageColorExact
int imagecolorexact (int im, int red, int green, int blue)
imagecolorexact() retourne l'index de la couleur spécifiée
dans la palette de l'image im.
10.31.10 ImageColorResolve
int imagecolorresolve (int im, int red, int green, int blue)
imagecolorresolve() retourne un index de couleur à tous les
coups. Soit il arrive à trouver la couleur demandée dans la palette, soit il
recherche la couleur la plus proche.
10.31.11 ImageGammaCorrect
int imagegammacorrect (int im , double inputgamma , double outputgamma )
imagegammacorrect() applique une correction gamma
au flot d'image GD im. Le facteur d'entrée est
inputgamma, et le facteur de sortie est
outputgamma.
10.31.12 ImageColorSet
bool imagecolorset (int im, int index, int red, int green, int blue)
imagecolorset() permet d'attribuer à un index d'une palette une
couleur spécifique. C'est une fonction très pratique pour effectuer du remplissage
de couleur sans le faire réellement.
10.31.13 ImageColorsForIndex
array imagecolorsforindex (int im, int index)
imagecolorsforindex() retourne un tableau associatif avec les
couleur rouge (red) , vert (green), bleu (blue) qui contiennent les valeurs de la
couleur correspondante.
10.31.14 ImageColorsTotal
int imagecolorstotal (int im)
imagecolorstotal() retourne le nombre de couleur de la palette.
10.31.15 ImageColorTransparent
int imagecolortransparent (int im, int col)
imagecolortransparent() permet de choisir la couleur
transparente d'une image, et de lui donner la valeur de col. im
est un identifiant d'image, retourné par imagecreate() et
col est un identifiant de couleur
retourné par imagecolorallocate().
10.31.16 ImageCopy
int imagecopy (int dst_im , int src_im , int dst_x , int dst_y , int src_x , int src_y , int src_w , int src_h )
Copie une partie de l'image src_im sur l'image de
destination dst_im, en commencant aux coordonnées
src_x, src_y et sur la largeur
de src_w et la hauteur de src_h.
La portion ainsi définie sera copiée et placée aux coordonnées
dst_x et dst_y.
10.31.17 ImageCopyResized
int imagecopyresized (int dst_im, int src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
imagecopyresized() copie une partie rectangulaire d'une image
dans une autre image de destination. dst_im est l'image
de destination, src_im est l'image source. Si les dimensions
de la source et de la destination ne sont pas égales, un étirement adéquat est
effectué pour faire correspondre les deux. Les coordonnées fournies se repère par
rapport au coin supérieur gauche. Cete fonction peut être utilisée pour recopier
des régions à l'intérieur d'une même image, si dst_im et
src_im sont identiques : mais si les régions se chevauchent,
le résultat risque d'être incohérent.
10.31.18 ImageCreate
int imagecreate (int x_size, int y_size)
imagecreate() retourne un identifiant d'image représentant
une image blanche, de largeur size x_size et longueur y_size.
10.31.19 ImageCreateFromGif
int imagecreatefromgif (string filename)
imagecreatefromgif() retourne un identifiant d'image qui
représente l'image obtenue à partir du fichier dont le nom est donné.
function LoadGif($imgname) { $im = @imagecreatefromgif($imgname); /* Tentative d'ouverture */ if ($im == "") { /* Echec ? */ $im = ImageCreate(150,30); /* Crée une image vide */ $bgc = ImageColorAllocate($im,255,255,255); $tc = ImageColorAllocate($im,0,0,0); ImageFilledRectangle($im,0,0,150,30,$bgc); ImageString($im,1,5,5,"Erreur lors du chargement du fichier $imgname",$tc); /* Affiche un message d'erreur */ } return $im; }
Note :
Etant donné que toutes les fonctions de gestion des GIF ont été supprimées de la
bibliothèque GD version 1.6, cette fonction n'est pas disponible si vous utilisez
cette version de la librairie.
10.31.20 ImageCreateFromJPEG
int imagecreatefromjpeg (string filename)
imagecreatefromjpeg() retourne un identifiant d'image
représentant un image obtenu à partir du fichier filename.
function LoadJpeg ($imgname) { $im = @ImageCreateFromJPEG ($imgname); /* Tentative d'ouverture */ if (!$im) { /* Vérification */ $im = ImageCreate (150, 30); /* Création d'une image blanche */ $bgc = ImageColorAllocate ($im, 255, 255, 255); $tc = ImageColorAllocate ($im, 0, 0, 0); ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc); /* Affichage d'un message d'erreur */ ImageString ($im, 1, 5, 5, "Erreur de chargement de l'image $imgname", $tc); } return $im; }
10.31.21 ImageCreateFromPNG
int imagecreatefrompng (string filename)
imagecreatefrompng() retourne un identifiant d'image
représentant un image obtenu à partir du fichier filename.
function LoadPNG ($imgname) { $im = @ImageCreateFromPNG ($imgname); /* Tentative d'ouverture */ if (!$im) { /* Vérification */ $im = ImageCreate (150, 30); /* Création d'une image blanche */ $bgc = ImageColorAllocate ($im, 255, 255, 255); $tc = ImageColorAllocate ($im, 0, 0, 0); ImageFilledRectangle ($im, 0, 0, 150, 30, $bgc); /* Affichage d'un message d'erreur */ ImageString ($im, 1, 5, 5, "Erreur de chargement de l'image $imgname", $tc); } return $im; }
10.31.22 ImageDashedLine
int imagedashedline (int im, int x1, int y1, int x2, int y2, int col)
imagedashedline() dessine une ligne pointillée entre les points
(x1,y1) et (x2,y2) (le coin supérieur droit est l'origine (0,0)) dans l'image
im, avec la couleur col.
10.31.23 ImageDestroy
int imagedestroy (int im)
imagedestroy() libère toute la mémoire associée avec l'image
im. im est un identifiant d'image
valide retourné par imagecreate().
10.31.24 ImageFill
int imagefill (int im, int x, int y, int col)
imagefill() effectue un remplissage avec la couleur col,
dans l'image im, à partir du point de coordonnées
(x,y) (le coin supérieur gauche est
l'origine (0,0)).
10.31.25 ImageFilledPolygon
int imagefilledpolygon (int im, array points, int num_points, int col)
imagefilledpolygon() dessine un polygone rempli dans l'image
im. points est un tableau PHP qui
contient les sommets des polygones sous la forme :. points[0] = x0,
points[1] = y0, points[2] = x1, points[3] = y1, etc. num_points
est le nombre total de sommets.
10.31.26 ImageFilledRectangle
int imagefilledrectangle (int im, int x1, int y1, int x2, int y2, int col)
imagefilledrectangle() dessine un rectangle de couleur
col dans l'image im, en commencant
par le sommet supérieur gauche (x1, y1)
et finissant au sommet inférieur droit (x2, y2).
Le coin supérieur gauche est l'origine (0, 0).
10.31.27 ImageFillToBorder
int imagefilltoborder (int im, int x, int y, int border, int col)
imagefilltoborder() remplit avec la couleur col
toute la région à l'intérieur de la région limitée par la couleur
border. Le point de départ est
(x,y)
(le coin supérieur gauche est l'origine (0,0)).
10.31.28 ImageFontHeight
int imagefontheight (int font)
imagefontheight() retourne la hauteur de la police en pixel.
10.31.29 ImageFontWidth
int imagefontwidth (int font)
imagefontwidth() retourne la largeur de la police en pixels.
10.31.30 ImageGif
int imagegif (int im, string filename)
imagegif() crée un fichier image GIF avec le nom
filename d'après l'image im.
L'argument im est un identifiant valide retourné par la
fonction imagecreate().
10.31.31 ImagePNG
int imagepng (int im, string filename) imagepng() envoie l'image GD (im) au format PNG sur la sortie standard (typiquement, le navigateur web), ou si filename est fourni, l'envoie dans un fichier. <?php $im = ImageCreateFromPng("test.png"); ImagePng($im); ?>
10.31.32 ImageJPEG
int imagejpeg (int im, string filename , int quality )
imagepng() envoie l'image GD (im)
au format JPEG sur la sortie standard (typiquement, le navigateur web), ou
si filename est fourni, l'envoi dans un fichier.
im a été créé par imagecreate().
10.31.33 ImageInterlace
int imageinterlace (int im, int interlace)
imageinterlace() active ou désactive le bit d'entrelacement.
Si l'entrelacement est à 1, l'image im sera interlacée, et
sinon, elle ne le sera pas.
10.31.34 ImageLine
int imageline (int im, int x1, int y1, int x2, int y2, int col)
imageline() dessine une ligne depuis le point
(x1,y1) jusqu'au point
(x2,y2)
(le coin supérieur gauche est l'origine (0,0)) dans l'image im
et avec la couleur col.
10.31.35 ImageLoadFont
int imageloadfont (string file)
imageloadfont() charge une nouvelle police utilisateur et
retourne un identifiant sur cette police. Cet identifiant sera toujours supérieur
à 5, pour éviter les conflits avec les polices standard PHP).
10.31.36 ImagePsExtendFont
bool imagepsextendfont (int font_index , double extend )
Etend ou condense la police de caractères font_index.
Si la valeur de extend est inférieure à 1, ce sera une
condensation.
10.31.37 ImagePsSlantFont
bool imagepsslantfont (int font_index , double slant )
Met en italique la police de caractères font_index
avec le coefficient slant.
10.31.38 ImagePolygon
int imagepolygon (int im, array points, int num_points, int col)
imagepolygon() dessine un polygone dans l'image im.
points est un tableau PHP qui contient les sommets du
polygone sous la forme : points[0] = x0, points[1] = y0, points[2] = x1,
points[3] = y1, etc. num_points est le nombre de sommets.
10.31.39 ImagePSBBox
array imagepsbbox (string text, int font, int size, int space, int width, float angle)
size est exprimé en pixels.
10.31.40 ImagePSEncodeFont
int imagepsencodefont (string encodingfile)
imagepsencodefont() charge le codage vectoriel d'un caractère
depuis un fichier et change le codage vectoriel de la police correspondante. Etant
donné que les polices PostScript de disposent pas des caractères au-delà de 127,
vous aurez surement besoin de les changer sur vous utilisez une autre langue que
l'anglais. Le format exact est décrit dans la documentation T1libs. T1lib est
disponible en deux formes : IsoLatin1.enc et IsoLatin2.enc.
10.31.41 ImagePSFreeFont
void imagepsfreefont (int fontindex)
Voir aussi imagepsloadfont().
10.31.42 ImagePSLoadFont
int imagepsloadfont (string filename)
Au cas oú tout a bien marché, un index de police va être retourné, et pourra être
utilisé pour des opérations ultérieures. Sinon, la fonction retourne FALSE et
affiche un message décrivant ce qui est erroné.
10.31.43 ImagePSText
array imagepstext (int image, string text, int font, int size, int foreground, int background, int x, int y, int space, int tightness, float angle, int antialias_steps)
size est exprimé en pixels.
10.31.44 ImageRectangle
int imagerectangle (int im, int x1, int y1, int x2, int y2, int col)
imagerectangle() dessine un rectangle dans la couleur
col, dans l'image im, et en
commencant au point supérieur gauche (x1,y1),
et en finissant au point inférieur droit (x2,y2).
Le coin supérieur gauche est l'origine (0,0).
10.31.45 ImageSetPixel
int imagesetpixel (int im, int x, int y, int col)
imagesetpixel() dessine un pixel au point
(x,y)
(le coin supérieur gauche est l'origine (0,0)) dans l'image im,
et avec la couleur col.
10.31.46 ImageString
int imagestring (int im, int font, int x, int y, string s, int col)
imagestring() dessine une ligne horizontale, dans l'image
im, aux coordonnées (x,y)
(le coin supérieur gauche est l'origine (0,0)) dans la couleur col.
Si l'argument de police vaut 1, 2, 3, 4 ou 5, une des polices par défaut sera
utilisée).
10.31.47 ImageStringUp
int imagestringup (int im, int font, int x, int y, string s, int col)
imagestringup() dessine une chaîne verticale dans l'image
im aux coordonnées (x, y)
(l'origine est le coin supérieur gauche (0,0)) dans la couleur col.
Si la police utilisée est 1, 2, 3, 4 ou 5, une police par défaut sera utilisée.
10.31.48 ImageSX
int imagesx (int im)
imagesx() retourne la largeur de l'image référencée par
im.
10.31.49 ImageSY
int imagesy (int im)
imagesy() retourne la hauteur de l'image référencée par
im.
10.31.50 ImageTTFBBox
array imagettfbbox (int size, int angle, string fontfile, string text) imagettfbbox() calcule et retourne le rectangle entourant le texte text, écrit avec une police truetype.
imagettfbbox() retourne une tableau avec 8 éléments, représentants les 4 sommets du rectangle ainsi définis.
Cette fonction requiert les bibliothèques GD et Freetype. Voir aussi imagettftext(). 10.31.51 ImageTTFText
array imagettftext (int im, int size, int angle, int x, int y, int col, string fontfile, string text)
imagettftext() dessine la chaîne text
dans l'image im, en commancant aux coordonnées
(x,y) (le coin supérieur gauche est
l'origine (0,0)), avec un angle de angle, et dans la
couleur col, en utilisant la police TrueType identifiée par
fontfile.
<?php Header("Content-type: image/gif"); $im = imagecreate(400,30); $black = ImageColorAllocate($im, 0,0,0); $white = ImageColorAllocate($im, 255,255,255); ImageTTFText($im, 20, 0, 10, 20, $white, "/path/arial.ttf", "Test en cours... Omega: Ω"); ImageGif($im); ImageDestroy($im); ?>
10.31.52 ImageTypes
int imagetypes Cette fonction retourne un champs de bit correspondant aux formats d'images supportés par la version de GD utilisée. Les valeurs suivantes sont valables : IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP. Pour vous assurer du support PNG, faite ceci : Exemple avec ImageTypes <?php if (ImageTypes() & IMG_PNG) { echo "Le type PNG est supporté"; } ?>
10.31.53 read_exif_data
array read_exif_data (string filename) read_exif_data() lis les entêtes EXIF de l'image JPEG filename. Elle retourne un tableau associatif où les index sont les noms d'entêtes EXIF, et les valeurs sont leur valeur associée. Les entêtes EXIF sont souvent disponibles dans les images générées par les appareils phots digitals, mais chaque constructeur marque ses images d'une manière qui lui est propre : il est impossible de savoir quels entêtes seront présents. read_exif_data <?php $exif = read_exif_data ('p0001807.jpg'); while(list($k,$v)=each($exif)) { echo "$k: $v<br>\n"; } ?> Output: FileName: p0001807.jpg FileDateTime: 929353056 FileSize: 378599 CameraMake: Eastman Kodak Company CameraModel: KODAK DC265 ZOOM DIGITAL CAMERA (V01.00) DateTime: 1999:06:14 01:37:36 Height: 1024 Width: 1536 IsColor: 1 FlashUsed: 0 FocalLength: 8.0mm RawFocalLength: 8 ExposureTime: 0.004 s (1/250) RawExposureTime: 0.0040000001899898 ApertureFNumber: f/ 9.5 RawApertureFNumber: 9.5100002288818 FocusDistance: 16.66m RawFocusDistance: 16.659999847412 Orientation: 1 ExifVersion: 0200
10.32 IMAP
Pour avoir accès à ces fonctions, vous devez compiler PHP avec l'option
--with-imap. Il faut avoir installé la librairie
c-client. Chargez sa dernière version sur le serveur
ftp://ftp.cac.washington.edu/imap/ et compilez la. Puis, copiez le fichier
`c-client/c-client.a' dans `/usr/local/lib'
ou n'importe quel autre dossier qui soit dans le chemin de link. Enfin, copiez les
fichiers `c-client/rfc822.h', `mail.h'
et `linkage.h' dans `/usr/local/include'
ou n'importe quel autre dossier qui soit dans le chemin d'inclusion.
10.32.1 imap_append
int imap_append (int imap_stream, string mbox, string message, stringflags)
Retourne TRUE en cas de succès, et FALSE en cas d'erreur.
10.32.2 imap_base64
string imap_base64 (string text)
imap_base64() décode un texte encodé en BASE64. Le texte
décodé est retourné sous la forme d'une chaîne.
10.32.3 imap_body
string imap_body (int imap_stream, int msg_number, int flags) imap_body() retourne le corps du message numéro msg_number de la boîte aux lettres courante. L'option flags est un masque qui peut contenir les valeurs suivantes :
10.32.4 imap_check
object imap_check (int imap_stream)
imap_check() retourne les informations à propos de la boîte
aux lettres courante. Retourne FALSE en cas d'échec.
Date : : Date du message Driver : Pilote Mailbox : Nom de la boîte aux lettres Nmsgs : Nombre de messages Recent : Nombre de messages récents
10.32.5 imap_close
int imap_close (int imap_stream, int flags)
Termine un flot IMAP. Prend un argument optionnel flag,
CL_EXPUNGE, qui va retirer automatiquement de la liste la boîte aux lettres.
10.32.6 imap_createmailbox
int imap_createmailbox (int imap_stream, string mbox)
imap_createmailbox() crée une nouvelle boîte aux lettres
nommée mbox (voir imap_open() pour
connaître le format des noms de mbox).
10.32.7 imap_delete
int imap_delete (int imap_stream, int msg_number)
Returns TRUE.
10.32.8 imap_deletemailbox
int imap_deletemailbox (int imap_stream, string mbox)
imap_deletemailbox() efface la boîte aux lettres
(voir imap_open() pour connaître le format des noms de
mbox).
10.32.9 imap_expunge
int imap_expunge (int imap_stream)
imap_expunge() efface tous les messages marqués pour
l'effacement par imap_delete().
10.32.10 imap_fetchbody
string imap_fetchbody (int imap_stream, int msg_number, string part_number, flags flags)
Cette fonction va rechercher une section du corps du message, et la retourne
sous la forme d'une chaîne. La section est une chaîne d'entiers, séparés par des
virgules, qui servent d'index dans le corps du message, comme spécifié dans la
norme IMAP4. Le texte n'est alors pas décodé par imap_fetchbody().
10.32.11 imap_fetchstructure
object imap_fetchstructure (int imap_stream, int msg_number, int flags )
Lit la structure du message msg_number. Cette fonction
dispose d'une option flags, qui une seule valeur,
FT_UID, pour indiquer que l'argument
msg_number est un UID.
Cette fonction retourne un objet avec des propriétés d'enveloppe,
de date interne, de taille, de structure de flags et de corps, ainsi qu'un objet
pour chaque attachement. La structure est la suivante :
10.32.12 imap_header
object imap_header (int imap_stream, int msg_number, int fromlength , int subjectlength , string defaulthost )
Cette fonction retourne un objet avec divers éléments d'entête :
remail, date, Date, subject, Subject, in_reply_to, message_id, newsgroups, followup_to, references message flags: Recent - 'R' si récent et lu 'N' si récent et pas lu ' ' if par récent Unseen - 'U' si pas lu ET pas récent ' ' si pas lu OU pas lu et récent Answered -'A' si répondu ' ' si non répondu Deleted - 'D' si effacé ' ' si pas effacé Draft - 'X' si brouillon ' ' si pas brouillon Flagged - 'F' si marqué ' ' si non marqué NOTE : le comportement de Récent/pas lu est un peu étrange. Si vous voulez savoir si un message n'est pas lu, vous devez vérifier avec Unseen == 'U' || Recent == 'N' toaddress (ligne to: complète, jusqu'à 1024 caractères) to[] (retourne un tableau d'objets, extrait de la ligne To , et contenant) personal adl mailbox host fromaddress (ligne From: complète, jusqu'à 1024 caractères) from[] (retourne un tableau d'objets, extrait de la ligne From , et contenant) personal adl mailbox host ccaddress (ligne cc: complète, jusqu'à 1024 caractères) cc[] (retourne un tableau d'objets, extrait de la ligne Cc , et contenant) personal adl mailbox host bccaddress (ligne bcc: complète, jusqu'à 1024 caractère) bcc[] (retourne un tableau d'objets, extrait de la ligne Bcc , et contenant) personal adl mailbox host reply_toaddress (ligne reply_to: complète, jusqu'à 1024 caractères) reply_to[] (retourne un tableau d'objets, extrait de la ligne Reply_to , et contenant) personal adl mailbox host senderaddress (ligne sender_address: complète, jusqu'à 1024 caractères) sender[] (retourne un tableau d'objets, extrait de la ligne Reply_to , et contenant) personal adl mailbox host return_path (ligne return_path: complète, jusqu'à 1024 caractères) return_path[] (retourne un tableau d'objets, extrait de la ligne return_path , et contenant) personal adl mailbox host udate (date du message, au format unix (timestamps)) fetchfrom (Ligne From , limitée à fromlengthcaractères) fetchsubject (Ligne de sujet, limitée à subjectlength caractères)
10.32.13 imap_rfc822_parse_headers
object imap_rfc822_parse_headers (string headers, string defaulthost )
imap_rfc822_parse_headers() retourne un objet
contenant les divers éléments d'entêtes, similaire à celui retourné
par imap_header(), hormis les flags et tous les
éléments qui sont spécifiques au serveur IMAP.
10.32.14 imap_headers
array imap_headers (int imap_stream)
imap_headers() retourne un tableau de chaîne contenant les
entête des messages. Une chaîne par message.
10.32.15 imap_listmailbox
array imap_listmailbox (int imap_stream, string ref, string pat)
Retourne un tableau contenant les noms des boîtes aux lettres.
10.32.16 imap_getmailboxes
array imap_getmailboxes (int imap_stream, string ref, string pat) Retourne un tableau d'objets contenant les informations sur les boîtes aux lettres. Chaque objet a les attributs de name, qui contient le nom complet de la boîte aux lettres; delimiter, qui est le délimiteur hiérarchique; et attributes. Attributes est un masque de bits, qui contient :
10.32.17 imap_listsubscribed
array imap_listsubscribed (int imap_stream, string ref, string pattern)
imap_listsubscribed() retourne un tableau avec toutes les
boîtes aux lettres auxquelles vous avez souscrit.
Les arguments ref et pattern
indiquent respectivement, le dossier oú chercher et le nom des boîtes recherchées,
sous la forme d'un masque.
10.32.18 imap_getsubscribed
array imap_getsubscribed (int imap_stream, string ref, string pattern)
Cette fonction est identique à imap_getmailboxes(),
mais ne retourne que les boîtes aux lettres auxquelles l'utilisateur est inscrit.
10.32.19 imap_mail_copy
int imap_mail_copy (int imap_stream, string msglist, string mbox, int flags)
imap_mail_copy() retourne TRUE en cas de succès et
FALSE en cas d'erreur.
10.32.20 imap_mail_move
int imap_mail_move (int imap_stream, string msglist, string mbox)
imap_mail_move() déplace les messages spécifiés par
msglist dans la boîte
aux lettres mbox. msglist est un
intervalle, et pas seulement une liste de messages.
10.32.21 imap_num_msg
int imap_num_msg (int imap_stream)
imap_num_msg() retourne le nombre de message dans la boîte
aux lettres courante.
10.32.22 imap_num_recent
int imap_num_recent (int imap_stream)
imap_num_recent() retourne le nombre de message récents
dans la boîte aux lettres courante.
10.32.23 imap_open
int imap_open (string mailbox, string username, string password, int flags) Retourne un flot IMAP en cas de succès, et FALSE en cas d'erreur. Cette fonction peut aussi être utilisée pour ouvrir des flots sur des serveurs POP3 et NNTP. Pour se connecter à un serveur IMAP, on peut utiliser la commande suivante : $mbox = imap_open("{localhost:143}INBOX","user_id","password"); Pour se connecter à un serveur POP3 qui fonctionne sur le port 110 de la machine locale on peut utiliser la commande suivante : $mbox = imap_open("{localhost/pop3:110}INBOX","user_id","password"); Pour se connecter à un serveur NNTP qui fonctionne sur le port 119 de la machine locale on peut utiliser la commande: $nntp = imap_open("{localhost/nntp:119}comp.test","","");
Pour se connecter à un serveur distant, remplacez "localhost" par le nom ou
l'adresse IP de la machine.
10.32.24 imap_ping
int imap_ping (int imap_stream)
Retourne TRUE si le flot existe toujours, et FALSE sinon.
10.32.25 imap_renamemailbox
int imap_renamemailbox (int imap_stream, string old_mbox, string new_mbox)
Renomme une boîte aux lettres.
10.32.26 imap_reopen
int imap_reopen (string imap_stream, string mailbox, string flags)
Retourne TRUE en cas de succès, et FALSE en cas d'erreur.
10.32.27 imap_subscribe
int imap_subscribe (int imap_stream, string mbox)
Souscrit à la boîte aux lettres mbox.
10.32.28 imap_undelete
int imap_undelete (int imap_stream, int msg_number)
Enlève la marque d'effacement du message msg_number, placée
avec imap_delete().
10.32.29 imap_unsubscribe
int imap_unsubscribe (int imap_stream, string mbox)
Termine la souscription à la boîte aux lettres mbox.
10.32.30 imap_qprint
string imap_qprint (string string)
Convertit la chaîne à guillemets string en une
chaîne à 8 bits.
10.32.31 imap_8bit
string imap_8bit (string string)
Convertit la chaîne à 8 bits en une chaîne à guillemets.
10.32.32 imap_binary
string imap_binary (string string)
Convertit la chaîne à 8 bits string en une chaîne à base64.
10.32.33 imap_scanmailbox
array imap_scanmailbox (int imap_stream, string string)
Lis la liste des boîtes aux lettres, et y recherche
la chaîne string.
10.32.34 imap_mailboxmsginfo
object imap_mailboxmsginfo (int imap_stream)
Retourne les informations à propos de la boîte aux lettres courante.
Retourne FALSE en cas d'échec.
Date : date du message Driver : lecteur Mailbox : Nom de la boîte aux lettres Nmsgs : nombre de messages Recent : nombre de messages récents Unread : nombre de messages non lus Size : taille de la boîte aux lettres
10.32.35 imap_rfc822_write_address
string imap_rfc822_write_address (string mailbox, string host, string personal)
Retourne une adresse email proprement formatée, à partir du nom de la boîte aux
lettre de l'hôte, et des informations personnelles.
10.32.36 imap_rfc822_parse_adrlist
string imap_rfc822_parse_adrlist (string address, string default_host)
Cette fonction analyse la chaîne address et essaie, pour
chaque adresse, retourne un tableau d'objets. les 4 objets sont :
mailbox - Le nom de la boîte aux lettres (nom d'utilisateur) host - Le nom de l'hôte personal - Le nom de l'utilisateur adl - La route jusqu'au domaine
10.32.37 imap_setflag_full
string imap_setflag_full (int stream, string sequence, string flag, string options)
Cette fonction affecte le flag spécifié aux messages de la sequence donné.
ST_UID la séquence contient des UIDs au lieu de numéro de séquence
10.32.38 imap_clearflag_full
string imap_clearflag_full (int stream, string sequence, string flag, string options)
Cette fonction efface le flag spécifié dans les messages de la séquence sequence.
ST_UID la séquence contient des UIDs au lieu de numéro de séquence
10.32.39 imap_sort
string imap_sort (int stream, int criteria, int reverse, int options)
Retourne un tableau de nombre de message, triés suivant les paramètres suivants :
SORTDATE Date du message SORTARRIVAL Date d'arrivée SORTFROM Nom de la première boîte aux lettres de l'adresse d'origine (From address) SORTSUBJECT Sujet du message SORTTO Nom de la première boîte aux lettres de destination (To address) SORTCC Nom de la boîte aux lettres de copie cachée (cc address) SORTSIZE Taille du message en octets
SE_UID Retourne l'UIDs à la place d'une séquence de nombres SE_NOPREFETCH Ne pas pré-télécharger les messages trouvés
10.32.40 imap_fetchheader
string imap_fetchheader (int imap_stream, int msgno, int flags)
Cette fonction retourne l'entête brut et complet RFC 822 du message msgno,
et le retourne sous la forme d'une chaîne.
FT_UID L'argument msgno est un UID FT_INTERNAL la chaîne renvoyée est au format "internal" , c'est à dire sans canonisation des CRLF FT_PREFETCHTEXT RFC822.TEXT doit être pré-téléchargé en même temps que l'entête. Cela réduit le RTT sur une connexion IMAP, si le message complet est souhaité. (e.g. dans une opération de sauvegarde dans un fichier).
10.32.41 imap_uid
int imap_uid (int imap_stream, int msgno)
Cette fonction retourne l'UID pour le message msgno.
C'est la fonction contraire de imap_msgno().
10.32.42 imap_msgno
int imap_msgno (int imap_stream, int uid)
imap_msgno() retourne le numéro de séquence de message
pour l'UID uid.
C'est la fonction contraire de imap_uid().
10.32.43 imap_search
array imap_search (int imap_stream, string criteria, int flags) imap_search() effectue une recherche dans la boîte aux lettres courantes, sur le flot IMAP courant. criteria est une chaîne, délimitée par des espaces, dans laquelle les mots-clés suivants sont acceptés : Tous les arguments multi-mots doivent être entre guillemets :
10.32.44 imap_last_error
string imap_last_error (void )
Cette fonction retourne le texte complet de la dernière erreur IMAP (si elle
existe) qui est survenu lors de la dernière requête. La pile d'erreur n'est pas
touchée. Appeler imap_last_error() successivement dans
nouvelles erreurs retournera la même erreur.
10.32.45 imap_errors
array imap_errors (void )
Cette fonction retourne tous les messages d'erreurs IMAP générés depuis le
dernier appel à imap_errors(), ou depuis le début de la page.
Lorsque imap_errors() est appelés, la pile d'erreur est vidée.
10.32.46 imap_alerts
array imap_alerts (void )
Cette fonction retourne tous les messages d'alerte IMAP générés depuis le dernier
appel à imap_alerts() ou depuis le début de la page.
Lorsque imap_alerts() est appelé, la pile d'alerte est vidée.
10.32.47 imap_status
object imap_status (int imap_stream, string mailbox, int options) Cette fonction retourne un objet contenant les informations de statut. Les flags valables sont :
10.32.48 imap_utf7_decode
string imap_utf7_decode (string text)
Décode la chaîne UTF-7 text en données 8 bits.
10.32.49 imap_utf7_encode
string imap_utf7_encode (string data)
Convertit les données 8 bits data en texte
UTF-7 text. L'encodage UTF-7 est défini dans la RFC 2060.
10.32.50 imap_utf8
string imap_utf8 (string text)
imap_utf8() converti le texte text
en UTF8 (comme défini dans la RFC2044).
10.32.51 imap_fetch_overview
array imap_fetch_overview (int imap_stream, string sequence, int flags) imap_fetch_overview() lit les entêtes de mail de la séquence sequence et retourne une sommaire de leur contenu. sequence doit contenir une séquence d'indices de messages ou d'UID, si flags contient FT_UID. La fonction retourne un tableau d'objets. Chaque objet décrit un entête :
$mbox = imap_open("{your.imap.host:143}","username","password") || die("Impossible de se connecter : ".imap_last_error()); $overview = imap_fetch_overview($mbox,"2,4:6",0); if(is_array($overview)) { reset($overview); while( list($key,$val) = each($overview)) { print $val->msgno . " - " . $val->date . " - " . $val->subject . "\n"; } } imap_close($mbox);
10.32.52 imap_mime_header_decode
array @xref{function.imap-header-decode , , imap_header_decode (string text) }
imap_mime_header_decode() décode les entêtes
d'un message MIME qui ne sont pas en texte ASCII.
(voir RFC2047)
Les éléments décodés sont retournés dans un tableau d'objets.
Chaque objet contient deux propriétés : "charset" et "text".
Si un éléments n'a pas été décodé, (en d'autres termes, si il est
en ASCII ), la propriété "charset" vaut "default".
$text="=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld@dkuug.dk>"; $elements=imap_mime_header_decode($text); for($i=0;$i<count($elements);$i++) { echo "Charset: {$elements[$i]->charset}\n"; echo "Text: {$elements[$i]->text}\n\n"; }
10.32.53 imap_mail_compose
string imap_mail_compose (array envelope, array body)
<?php $envelope["from"]="musone@afterfive.com"; $envelope["to"]="musone@darkstar"; $envelope["cc"]="musone@edgeglobal.com"; $part1["type"]=TYPEMULTIPART; $part1["subtype"]="mixed"; $filename="/tmp/imap.c.gz"; $fp=fopen($filename,"r"); $contents=fread($fp,filesize($filename)); fclose($fp); $part2["type"]=TYPEAPPLICATION; $part2["encoding"]=ENCBINARY; $part2["subtype"]="octet-stream"; $part2["description"]=basename($filename); $part2["contents.data"]=$contents; $part3["type"]=TYPETEXT; $part3["subtype"]="plain"; $part3["description"]="description3"; $part3["contents.data"]="contents.data3\n\n\n\t"; $body[1]=$part1; $body[2]=$part2; $body[3]=$part3; echo nl2br(imap_mail_compose($envelope,$body)); ?>
10.32.54 imap_mail
string imap_mail (string to, string subject, string message, string additional_headers , string cc , string bcc , string rpath )
Cette fonction n'est disponible que sous PHP3 actuellement.
10.33 Options PHP & informations
10.33.1 assert
int assert (string)bool assertion|
assert() va vérfier l'assertion assertion
et prendre la mesure appropriée si le résultat est
false.
10.33.2 assert-options
mixed assert_options (int what, mixed value )
Avec assert_options() vous pouvez modifier les diverses
options de la fonction assert(), ou simplement
connaître la configuration actuelle.
10.33.3 extension_loaded
bool extension_loaded (string name)
Retourne vraie si l'extension name a été chargée.
Vous pouvez voir les différents noms des extensions, en utilisant la fonction
phpinfo().
10.33.4 dl
int dl (string library)
Charge l'extension PHP library à la volée .
Voir aussi la directive de configuration
7.1.5.2 ini.extension-dir.
10.33.5 getenv
string getenv (string varname) Retourne la valeur de la variable d'environnement varname, ou FALSE en cas d'erreur. $ip = getenv("REMOTE_ADDR"); // retourne l'adresse IP de l'utilisateur
10.33.6 get_cfg_var
string get_cfg_var (string varname)
Retourne la valeur courante de l'option PHP varname,
ou bien FALSE en cas d'erreur.
10.33.7 get_current_user
string get_current_user (void)
Retourne le nom du possesseur du script courant.
10.33.8 get_magic_quotes_gpc
long get_magic_quotes_gpc (void)
Retourne le configuration actuelle de l'option
7.1.1.16 ini.magic-quotes-gpc
(0 pour l'option désactivée, 1 pour l'option activée).
10.33.9 get_magic_quotes_runtime
long get_magic_quotes_runtime (void)
RRetourne la configuration actuelle de l'option
7.1.1.17 ini.magic-quotes-runtime.
(0 pour option desactivée, 1 pour option sactivée).
10.33.10 getlastmod
int getlastmod (void) Retourne la date de dernière modification de la page. La valeur retournée est un marqueur de temps UNIX, utilisable comme paramètre avec la fonction date(). Retourne FALSE en cas d'erreur. getlastmod() example // affiche 'Dernière modification: March 04 1998 20:43:59.' echo "Dernière modification: ".date( "F d Y H:i:s.", getlastmod() );
10.33.11 getmyinode
int getmyinode (void)
Retourne l'inode du script, ou FALSE en cas d'erreur.
10.33.12 getmypid
int getmypid (void)
Retourne le numéro de processus actuel ou FALSE en cas d'erreur.
10.33.13 getmyuid
int getmyuid (void)
Retourne l'UID du propriétaire du script actuel ou FALSE en cas d'erreur.
10.33.14 getrusage
array getrusage (int who )
Cette fonction est une interface à la fonction system getrusage(2). Elle retourne
un tableau associatif contenant les informations renvoyées par cet appel système.
Si "who is 1", getrusage sera appelé avec le paramètre RUSAGE_CHILDREN. $dat = getrusage(); echo $dat["ru_nswap"]; # Taille de la mémoire swap echo $dat["ru_majflt"]; # Nombre de page mémoires utilisées echo $dat["ru_utime.tv_sec"]; # temps utilisateur (en secondes) echo $dat["ru_utime.tv_usec"]; # temps utilisateur (en microsecondes)
Consultez le manuel "man" pour plus de détails.
10.33.15 ini_alter
string ini_alter (string varname, string newvalue)
Change la valeur de l'option de configuration varname
et lui donne la valeur de newvalue.
Retourne false en cas d'échec, et la valeur précédente
en cas de succès.
10.33.16 ini_get
string ini_get (string varname)
Retourne la valeur de l'option de configuration varname
en cas de succès, et false.
10.33.17 ini_restore
string ini_restore (string varname)
Restaure la valeur originale de l'option de configuration
varname.
10.33.18 ini_set
string ini_set (string varname, string newvalue)
Change la valeur de l'option de configuration varname
et lui donne la valeur de newvalue.
Retourne false en cas d'échec, et la valeur précédente
en cas de succès.
10.33.19 phpcredits
void phpcredits (int flag) Cette fonction affiche la liste des développeurs PHP, des modules, etc... Elle génère le code HTML approprié pour insérer les informations dans une page. Le paramètre flag indique les informations qui doivent être affichées. Par exemple, pour afficher les crédits généraux, vous pouvez utiliser le code suivant : ... phpcredits(CREDITS_GENERAL); ... Et pour afficher la liste des développeurs et du groupe de documentation dans une page séparée, vous utiliserez <?php phpcredits(CREDITS_GROUP + CREDITS_DOCS + CREDITS_FULLPAGE); ?> Si vous vous sentez l'envie de placer tous les crédits dans votre page, vous pouvez utiliser ceci : <html> <head> <title>Ma page de crédits</title> </head> <body> <?php // Un peu de votre code phpcredits(CREDITS_ALL + CREDITS_FULLPAGE); // Un autre peu de votre code ?> </body> </html>
Voir aussi phpinfo(), phpversion(), php_logo_guid(). 10.33.20 phpinfo
int phpinfo (void)
Affiche de nombreuses informations sur le PHP, concernant sa configuration courante :
options de compilation, extensions, version, informations sur le serveur, et
environnement (lorsque compilé comme module), environnement PHP, chemins, utilisateur,
entêtes HTTP, et licence GNU Public License.
10.33.21 phpversion
string phpversion (void) Retourne le numéro de la version courante de PHP. example de la fonction phpversion() // affiche le numéro de version courante du PHP. echo "PHP Version: ".phpversion();
10.33.22 php_logo_guid
string php_logo_guid (void)
Note :
Cette fonctionnalité a été ajoutée dans PHP 4 Beta 4.
10.33.23 php_sapi_name
string php_sapi_name
php_sapi_name() retourne une chaîne en minuscule
qui décrit le type d'interface utilisé en le serveur web et PHP
(Server API, SAPI). En CGI PHP, cette chaîne est "cgi", en
mod_php pour Apache, cette chaîne est "apache", etc...
$inter_type = php_sapi_name(); if ($inter_type == "cgi") print "Vous utilisez CGI PHP\n"; else print "Vous n'utilisez pas CGI PHP\n";
10.33.24 php_uname
string php_uname
php_uname() retourne les informations sur le système
d'exploitation sur lequel tourne PHP.
if (substr(php_uname(), 0, 7) == "Windows") { die("Désolé, ce script ne fonctionne pas sous Windows.\n"); }
10.33.25 putenv
void putenv (string setting)
Fixe la valeur d'une variable d'environnement.
putenv("UNIQID=$uniqid");
10.33.26 set_magic_quotes_runtime
long set_magic_quotes_runtime (int new_setting)
Active/désactive l'option
7.1.1.17 ini.magic-quotes-runtime.
(0 l'option est désactivée, 1 l'option est activée).
10.33.27 set_time_limit
void set_time_limit (int seconds)
Fixe le délai d'expiration d'un script, en secondes. Si cette limite est atteinte,
le script s'interrompt, et renvoie une erreur fatale. La valeur par défaut est
30 secondes ou, si c'est le cas, la valeur de la directive max_execution_time
définie dans le 7.1 Le fichier de configuration.
Si la valeur est zéro, il n'y a alors aucune limite imposée.
10.33.28 zend_logo_guid
string zend_logo_guid (void)
Note :
Cette fonctionnalité a été ajouté en PHP 4 Beta 4.
10.33.29 get_loaded_extensions
array get_loaded_extensions (void )
get_loaded_extensions() retourne un tableau contenant les
noms de tous les modules compilés et chargés sur l'interpreteur PHP courant.
print_r (get_loadedextensions()); affichera la liste suivante : Array ( [0] => xml [1] => wddx [2] => standard [3] => session [4] => posix [5] => pgsql [6] => pcre [7] => gd [8] => ftp [9] => db [10] => Calendar [11] => bcmath )
10.33.30 get_extension_funcs
array get_extension_funcs (string module_name)
This function returns the names of all the functions defined in
the module indicated by module_name.
print_r (get_extension_funcs ("xml")); print_r (get_extension_funcs ("gd"));
will print a list of the functions in the modules
xml and gd respectively.
10.33.31 get_required_files
array get_required_files (void )
get_required_files() retourne un tableau associatif
contenant les noms de tous les fichiers qui ont été chargés dans un
script avec la fonction require_once(). Les index de
ces tableaux sont les noms des fichiers utilisés dans la fonction
require_once() sans les extensions ".php".
<?php require_once ("local.php"); require_once ("../inc/global.php"); for ($i=1; $i<5; $i++) include "util".$i."php"; echo "Fichiers requis par required_once()\n"; print_r (get_required_files()); echo "Fichiers inclus par included_once()\n"; print_r (get_included_files()); ?> va générer l'affichage suivant : Fichiers requis par required_once() Array ( [local] => local.php [../inc/global] => /full/path/to/inc/global.php ) Fichiers inclus par included_once() Array ( [util1] => util1.php [util2] => util2.php [util3] => util3.php [util4] => util4.php )
10.33.32 get_included_files
array get_included_files (void )
get_required_files() retourne un tableau associatif
contenant les noms de tous les fichiers qui ont été chargés dans un
script avec la fonction include_once(). Les index de
ces tableaux sont les noms des fichiers utilisés dans la fonction
include_once() sans les extensions ".php".
10.34 LDAP
LDAP est l'acronyme de Lightweight Directory Access Protocol, c'est à dire
Protocole Léger d'Accès aux Dossiers. C'est un protocole utilisé pour accéder à
des "serveurs de dossiers", des serveurs qui gèrent les informations de
manière hiérarchique.
/usr/local/myapp/docs
Le slash indique une division de la référence, et la séquence est lue de gauche
à droite.
cn=Jean Dupont,ou=Comptes,o=Ma Société,c=Fr
La virgule marque une division de la référénce, et la séquence est lue de droite
à gauche. Vous pouvez la lire comme ceci :
country = Fr organization = Ma Société organizationalUnit = Comptes commonName = Jean Dupont
De la même façon qu'il n'y a pas de règle universelle d'organisation d'un disque
dur, un serveur de dossier peut supporter n'importe quelle structure du moment
qu'elle a un sens pour ce qu'on en fait. Cependant, il existe quelques conventions
: il est impossible d'écrire un code d'accès à un dossier sans en connaître sa
structure, de la même façon que vous ne pouvez pas utiliser une base de données
sans en connaître les tables.
10.34.1 Exemple complet
Recupérer toutes les entrées dont le nom commence par "S" dans un serveur, et
afficher le nom et l'adresse email.
// Structure d'une commande simple : // connexion, lien, recherche, interpretation de la recherche // résultat, déconnexion <?php echo "<?h3>LDAP query test<?/h3>"; echo "Connexion ..."; $ds=ldap_connect("localhost"); // Doit être un serveur LDAP valide! echo "Résultat de la connexion : ".$ds."<?p>"; if ($ds) { echo "Lien ..."; $r=ldap_bind($ds); // Ceci est un lien "anonymous", typiquement // en lecture seule. En cas d'accès, affiche // " Lien résultat est" echo "Lien résultat est ".$r."<?p>"; echo "Recherche de (sn=S*) ..."; // Recherche dans les noms $sr=ldap_search($ds,"o=Ma Société, c=Fr", "sn=S*"); echo "Résultat : ".$sr."<?p>"; echo "Nombre d'entrée retournée : ".ldap_count_entries($ds,$sr)."<?p>"; echo "Lecture des entrées...<?p>"; $info = ldap_get_entries($ds, $sr); echo "Data for ".$info["count"]." items returned:<?p>"; for ($i=0; $i<?$info["count"]; $i++) { echo "dn vaut : ". $info[$i]["dn"] ."<?br>"; echo "première entrée cn vaut : ". $info[$i]["cn"][0] ."<?br>"; echo "premièr email vaut: ". $info[$i]["mail"][0] ."<?p>"; } echo "Déconnexion "; ldap_close($ds); } else { echo "<?h4>Impossible de se connecter à un serveur LDAP <?/h4>"; } ?> 10.34.1.1 Utilisation des fonctions PHP LDAP
Il faut d'abord que les bibliothèques client LDAP soient compilées avec PHP.
Vous pouvez vous procurer ces bibliothèques University of Michigan
(ldap-3.3 package) ou chez Netscape (Netscape Directory SDK).
ldap_connect() // établi une connexion à un serveur | ldap_bind() // nom de compte "login" ou anonyme | éxécution de commandes sur le serveur, comme un listage, ou une modification de données avec affichage | ldap_close() // "déconnexion"
10.34.1.2 Plus d'informations
Vous pouvez en apprendre encore plus, mais en anglais, aux adresses suivantes :
Le SDK Netscape contient un guide du programmeur au format HTML particulièrement
pratique.
10.34.2 ldap_add
int ldap_add (int link_identifier, string dn, array entry)
Retourne TRUE en cas de succès, ou FALSE en cas d'erreur.
entree["attribut1"] = valeur entree["attribut2"][0] = valeur1 entree["attribut2"][1] = valeur2 Exemple complet avec lien authentifié <?php $ds=ldap_connect("localhost"); // On suppose que le serveur LDAP est sur cet hote if ($ds) { // liaison avec le nd approprié, pour avoir un accès en modification $r=ldap_bind($ds,"cn=root, o=Ma Société, c=Fr", "secret"); // preparation des données $info["cn"]="John Jones"; $info["sn"]="Jones"; $info["mail"]="jonj@here.and.now"; $info["objectclass"]="person"; // Ajout des données dans le dossier $r=ldap_add($ds, "cn=John Jones, o=My Company, c=US", $info); ldap_close($ds); } else { echo "Impossible de se connecter au serveur LDAP "; } ?> 10.34.3 ldap_mod_add
int ldap_mod_add (int link_identifier, string dn, array entry)
Retourne TRUE en cas de succès, et FALSE sinon.
10.34.4 ldap_mod_del
int ldap_mod_del (int link_identifier, string dn, array entry)
Retourne TRUE en cas de succès, et FALSE sinon. 10.34.5 ldap_mod_replace
int ldap_mod_replace (int link_identifier, string dn, array entry)
Retourne TRUE en cas de succès, et FALSE sinon.
10.34.6 ldap_bind
int ldap_bind (int link_identifier, string bind_rdn, string bind_password)
ldap_bind() lie un serveur LDAP avec le RDN et mot de passe
spécifié (éventuellement). Retourne TRUE en cas de succès, et FALSE sinon.
10.34.7 ldap_close
int ldap_close (int link_identifier)
Retourne TRUE en cas de succès, et FALSE sinon.
10.34.8 ldap_compare
int ldap_compare (int link_identifier, string dn, string attribute, string value)
Retourne TRUE si value correspondent, sinon false.
Retourne -1 en cas d'erreur.
<?php $ds=ldap_connect("localhost"); // On suppose que le serveur LDAP est sur cet hôte if ($ds) { // lie if(ldap_bind($ds)) { // prépare des données $dn = "cn=Matti Meikku, ou=My Unit, o=My Company, c=FI"; $value = "secretpassword"; $attr = "password"; // compare les valeurs $r=ldap_compare($ds, $dn, $attr, $value); if ($r === -1) { echo "Erreur: ".ldap_error($ds); } elseif ($r === TRUE) { echo "Mot de passe correct."; } elseif ($r === FALSE) { echo "Mauvaise réponse! Mot de passe incorrect!."; } } else { echo "Impossible d'atteindre le serveur LDAP."; } ldap_close($ds); } else { echo "Impossible de se connecter au serveur LDAP."; } ?>
Note :
ldap_compare() NE peut PAS être utilisé pour comparer des
valeurs binaires!
10.34.9 ldap_connect
int ldap_connect (string hostname, int port)
Retourne un identifiant positif de serveur LDAP en cas de succès, ou bien
FALSE en cas d'erreur.
10.34.10 ldap_count_entries
int ldap_count_entries (int link_identifier, int result_identifier)
Retourne le nombre d'entrées en cas de succès, et FALSE sinon.
10.34.11 ldap_delete
int ldap_delete (int link_identifier, string dn)
Retourne TRUE en cas de succès, et FALSE sinon.
10.34.12 ldap_dn2ufn
string ldap_dn2ufn (string dn)
ldap_dn2ufn() sert à mettre le nd dn
dans un format plus agréable, notamment en supprimant les noms des types.
10.34.13 ldap_explode_dn
array ldap_explode_dn (string dn, int with_attrib)
ldap_explode_dn() sert à scinder le nd dn
retourné par ldap_get_dn() en plusieurs composants. Chaque
composant est reconnu sous le nom Nom Distinct Relatif (ou RDN, en anglais).
ldap_explode_dn() retourne un tableau qui contient ces
composants. with_attrib sert à préciser si le RDN est
retourné avec ses attributs, ou seul. Pour obtenir le RDN et ses attributs,
mettez with_attrib à 0 et pour n'avoir que les valeurs,
mettez le à 1.
10.34.14 ldap_first_attribute
string ldap_first_attribute (int link_identifier, int result_entry_identifier, int ber_identifier)
Retourne le premier attribut en cas de succès, et FALSE sinon.
10.34.15 ldap_first_entry
int ldap_first_entry (int link_identifier, int result_identifier)
Retourne un identifiant sur la première entrée en cas de succès,
et FALSE sinon.
10.34.16 ldap_free_result
int ldap_free_result (int result_identifier)
Retourne TRUE en cas de succès, et FALSE sinon.
10.34.17 ldap_get_attributes
array ldap_get_attributes (int link_identifier, int result_entry_identifier)
Retourne un tableau multi-dimensionel en cas de succès, et FALSE sinon.
// $ds est l'identifiant de lien pour ce dossier // $sr est un résultat de recherche valide, obtenu lors d'une recherche // précédente $entry = ldap_first_entry($ds, $sr); $attrs = ldap_get_attributes($ds, $entry); echo $attrs["count"]." Attributs dans cette entrée:<p>"; for ($i=0; $i<$attrs["compte"]; $i++) echo $attrs[$i]."<br>";
10.34.18 ldap_get_dn
string ldap_get_dn (int link_identifier, int result_entry_identifier)
Retourne le DN de l'entrée en cas de succès, et FALSE sinon.
10.34.19 ldap_get_entries
array ldap_get_entries (int link_identifier, int result_identifier)
Retourne un tableau multi dimensionnel en cas de succès, et FALSE sinon.
résultat ["compte"] = nombre d'entrées du résultat résultat [0] : correspond aux détails de la première entrée : résultat [i]["nd"] = ND de la i-ième entrée résultat [i][" compte "] = nombre d'attributs de la i-ième entrée résultat [i][j] = j-ième attribut de la i-ième entrée résultat [i]["attribut"]["count"] = nombre de valeur pour l'attribut résultat [i]["attribut"][j] = j-ième valeur de l'attribut
10.34.20 ldap_get_values
array ldap_get_values (int link_identifier, int result_entry_identifier, string attribute)
Retourne un tableau de valeurs en cas de succès, et FALSE sinon.
return_value["count"] = nombre de valeurs de l'attribut return_value[0] = première valeur de l'attribut return_value[i] = n-ième valeur de attribut Liste toutes les valeurs avec l'attribut "mail" // $ds est l'identifiant de lien pour ce dossier // $sr est un résultat de recherche valide, obtenu lors d'une recherche // précédente // $entry est un identifiant valide d'entrée $values = ldap_get_values($ds, $entry,"mail"); echo $values["count"]." Adresse email dans ce résultat.<p>"; for ($i=0; $i < $values["count"]; $i++) echo $values[$i]."<br>";
10.34.21 ldap_get_values_len
array ldap_get_values_len (int link_identifier, int result_entry_identifier, string attribute)
Retourne un tableau de valeurs pour l'attribut, ou bien FALSE en cas d'erreur.
10.34.22 ldap_list
int ldap_list (int link_identifier, string base_dn, string filter, array attributes)
Retourne TRUE en cas de succès, et FALSE sinon.
// $ds est un identifiant de connexion valide. $basedn = "o=Ma Société, c=Fr"; $justthese = array("ou"); $sr=ldap_list($ds, $basedn, "ou=*", $justthese); $info = ldap_get_entries($ds, $sr); for ($i=0; $i<$info["count"]; $i++) echo $info[$i]["ou"][0] ;
10.34.23 ldap_modify
int ldap_modify (int link_identifier, string dn, array entry)
Retourne TRUE en cas de succès, et FALSE sinon.
10.34.24 ldap_next_attribute
string ldap_next_attribute (int link_identifier, int result_entry_identifier, int ber_identifier)
Retourne l'attribut suivant en cas de succès, et sinon, une erreur.
10.34.25 ldap_next_entry
int ldap_next_entry (int link_identifier, int result_entry_identifier)
Retourne l'identifiant de l'entrée suivante, dans le résultat qui a été
initialisé par ldap_first_entry(). Si il n'y a plus d'entrée,
retourne FALSE.
10.34.26 ldap_read
int ldap_read (int link_identifier, string base_dn, string filter, array attributes)
Retourne un identifiant de résultat en cas de succès, et FALSE sinon.
10.34.27 ldap_search
int ldap_search (int link_identifier, string base_dn, string filter, array attributes)
Retourne un identifiant de résultat en cas de succès, et FALSE sinon.
// $ds est un identifiant valide de connexion à un serveur LDAP // $person est tout ou une partir d'un nom $dn = "o=Ma Société, c=Fr"; $filter="(|(sn=$person*)(givenname=$person*))"; $justthese = array( "ou", "sn", "givenname", "mail"); $sr=ldap_search($ds, $dn, $filter, $justthese); $info = ldap_get_entries($ds, $sr); print $info["count"]." Entrées retournées.<p>";
10.34.28 ldap_unbind
int ldap_unbind (int link_identifier)
Retourne TRUE en cas de succès, et FALSE sinon.
10.34.29 ldap_err2str
string ldap_err2str (int errno)
Retourne un message d'erreur. <?php for($i=0; $i<100; $i++) { printf("Error $i: %s<br>\n", ldap_str2err($i)); } ?>
10.34.30 ldap_errno
int ldap_errno (int link_id)
Retourne le numéro d'erreur LDAP généré par la dernière commande.
<?php // Cet exemple contient une erreur, que nous allons intercepter. $ld = ldap_connect("localhost"); $bind = ldap_bind($ld); // Erreur de syntaxe dans l'expression du filtre (errno 87), // ce doit être "objectclass=*" $res = @ldap_search($ld, "o=Myorg, c=DE", "objectclass"); if (!$res) { printf("LDAP-Errno: %s<br>\n", ldap_errno($ld)); printf("LDAP-Error: %s<br>\n", ldap_error($ld)); die("Argh!<br>\n"); } $info = ldap_get_entries($ld, $res); printf("%d entrées trouvées.<br>\n", $info["count"]); ?>
10.34.31 ldap_error
string ldap_error (int link_id)
Retourne un message d'erreur.
10.35 Mail
mail() envoie du courrier éléctronique. 10.35.1 mail
bool mail (string to, string subject, string message, string additional_headers)
mail() poste automatiquement le message message
à destination de to.
Les destinataires multiples doivent être séparés par des retours chariots ("\n").
mail("rasmus@lerdorf.on.ca", "My Subject", "Ligne 1\nLigne 2\nLigne 3");
mail("nobody@aol.com", "Le sujet", $message, "From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer: PHP/" . phpversion());
10.35.2 ezmlm_hash
int ezmlm_hash (string addr)
ezmlm_hash() calcule la valeur de hash nécessaire
lorsque vous conservez vos listes de diffusion EZMLM dans une base
MySQL.
$user = "kris@koehntopp.de"; $hash = ezmlm_hash ($user); $query = sprintf ("INSERT INTO sample VALUES (%s, '%s')", $hash, $user); $db->query($query); // utilisation de l'interface PHPLIB
10.36 Mathématiques
10.36.1 Introduction
Ces fonctions ne sont capables de manipuler que des entiers doubles, ou des long.
Si vous avez besoin de manipuler des nombres plus grands, reportez vous à
10.4 Mathématiques sur de grands nombres.
10.36.1.1 Constantes mathématiques
Les valeurs suivantes sont définies comme des constantes dans PHP:
10.36.2 Abs
mixed abs (mixed number)
Retourne la valeur absolue du nombre number. Si le nombre
est de type float, le type retourné est float, sinon, c'est integer (entier).
10.36.3 Acos
float acos (float arg)
Retourne l'arc cosinus de arg (arg en radians).
10.36.4 Asin
float asin (float arg)
Retourne l'arc sinus de arg (arg en radians).
10.36.5 Atan
float atan (float arg)
Retourne l'arc tangent de arg (arg en radians).
10.36.6 Atan2
float atan2 (float y, float x)
Retourne l' arc tangent de deux variables x et y. La formule est :
" arc tangent (y / x) ", et les signes des arguments sont utilisés
pour déterminer le quadrant du résultat.
10.36.7 base_convert
strin base_convert (string number, int frombase, int tobase) Retourne une chaîne contenant l'argument number représenté dans la base tobase. La base de représentation de number est donnée par frombase. frombase et tobase doivent être compris entre 2 et 36, inclus. Les chiffres supérieurs à 10 des bases supérieures à 10 seront représentées par les lettres de a à z, avec a = 10 et z = 36. base_convert() $binary = base_convert($hexadecimal, 16, 2);
10.36.8 BinDec
int bindec (string binary_string)
Retourne la conversion d'un nombre binaire représenté par la chaîne
binary_string en décimal.
10.36.9 Ceil
int ceil (float number)
Retourne l'entier supérieur du nombre number. Utiliser
ceil() sur un entier ne sert à rien.
10.36.10 Cos
float cos (float arg)
Retourne le cosinus de arg (arg en radians).
10.36.11 DecBin
string decbin (int number)
Retourne une chaîne contenant la représentation binaire de l'entier donné
en argument. Le plus grand nombre pouvant être converti est 2147483647
en décimal, ce qui donne une série de 31 uns (1).
10.36.12 DecHex
string dechex (int number)
Retourne une chaîne contenant la représentation hexadécimale du nombre
number. Le nombre le plus grand qui puisse être
converti est 2147483647 en décimal, ce qui donnera "7fffffff".
10.36.13 DecOct
string decoct (int number)
Retourne une chaîne contenant la représentation octale du nombre donné
number. Le nombre le plus grand qui puisse être converti
est 2147483647 en décimal, ce qui donnera "17777777777".
10.36.14 deg2rad
double deg2rad (double number)
Cette fonction converti number de degrés
en radians.
10.36.15 Exp
float exp (float arg)
Retourne l'exponentielle de arg, c'est à dire
e élevé à la puissance arg.
10.36.16 Floor
int floor (float number)
Retourne l'entier inférieur du nombre number.
Utiliser floor() sur un entier ne sert à rien.
10.36.17 getrandmax
int getrandmax (void )
Retourne la plus grande valeur aléatoire possible retournée par
rand().
10.36.18 HexDec
int hexdec (string hex_string)
Retourne une chaîne contenant la représentation décimal du nombre
hex_string. Le nombre le plus grand qui puisse être
converti est 7fffffff en décimal, ce qui donne "2147483647 ".
10.36.19 lcg_value
double lcg_value
lcg_value() retourne un nombre pseudo-aléatoire,
compris entre 0 et 1. Cette fonction combine deux générateurs de congruence,
de période respectives 2^31 - 85 et 2^31 - 249. La période de cette fonction
est le produit de ces deux nombres premiers (soit §2^31 - 85)*(2^31 - 249)).
10.36.20 Log
float log (float arg)
Retourne le logarithme naturel de arg.
10.36.21 Log10
float log10 (float arg)
Retourne le logarithme en base 10 de arg.
10.36.22 max
mixed max (mixed arg1, mixed arg2, mixed argn)
max() retourne la la plus grande valeur numérique parmi les
valeurs passées en paramètre.
10.36.23 min
mixed min (mixed arg1, mixed arg2, mixed argn)
min() retourne la plus petite valeur numérique parmi les
valeurs passées en paramètre.
10.36.24 mt_rand
int mt_rand ( int min , int max )
De nombreux générateurs de nombre aléatoires provenant de vieilles bibliothèques
libcs ont des comportement douteux et sont très lents.
Par défaut, PHP utilise le générateur de nombres aléatoires de libc avec la
fonction rand(). mt_rand() est une
fonction de remplacement, pour cette dernière. Elle utilise un générateur de
nombre aléatoire de caractéristique connue, le " Mersenne Twister ", qui
va produire des nombres utilisables en cryptographie, et qui est 4 fois plus
rapide que la fonction standard libc. La "Homepage of the Mersenne Twister "
est http://www.math.keio.ac.jp/~matumoto/emt.html, une version optimisée
des sources de MT est disponible à
http://www.scp.syr.edu/~marc/hawk/twister.html.
10.36.25 mt_srand
void mt_srand (int seed) Initialise une meilleure valeur aléatoire avec seed. // initialise avec les microsecondes depuis la dernière seconde entière mt_srand((double)microtime()*1000000); $randval = mt_rand();
10.36.26 mt_getrandmax
int mt_getrandmax (void )
Retourne la plus grand valeur aléatoire possible que peut retourner
mt_rand().
10.36.27 number_format
string number_format (float number, int decimals, string dec_point, string thousands_sep)
number_format() retourne une chaîne représentant
number formaté. Cette fonction accepte un, deux ou 4
paramètres (mais pas trois).
10.36.28 OctDec
int octdec (string octal_string)
Retourne une chaîne contenant la représentation décimale du nombre
octal_string. Le nombre le plus grand qui puisse être
converti est 17777777777 en décimal, ce qui donnera "2147483647".
10.36.29 pi
double pi (void )
Retourne la valeur de pi.
10.36.30 pow
float pow (float base, float exp)
Retourne base élevé à la puissance
exp.
10.36.31 rad2deg
double rad2deg (double number)
rad2deg() converti number (supposé en radians) en degrés.
10.36.32 rand
int rand ( int min , int max )
Appelée sans les options min et max,
rand() retourne un nombre pseudo-aléatoire entre 0 et
10.36.33 round
double round (double val) Retourne la valeur arrondie de val. $foo = round( 3.4 ); // $foo == 3.0 $foo = round( 3.5 ); // $foo == 4.0 $foo = round( 3.6 ); // $foo == 4.0 10.36.34 Sin
float sin (float arg)
Retourne le sinus de arg ( arg in radians).
10.36.35 Sqrt
float sqrt (float arg)
Retourne la racine carrée de arg.
10.36.36 srand
void srand (int seed) Initialise le générateur de nombres aléatoires avec seed. // initialise avec les microsecondes depuis la dernière seconde entière srand((double)microtime()*1000000); $randval = rand();
10.36.37 Tan
float tan (float arg)
Retourne la tangente de arg (arg en radians).
10.37 MCAL
MCAL signifie Modular Calendar Access Library (librairie calendaire modulaire).
10.37.1 mcal_open
int mcal_open (string calendar, string username, string password, string options)
Retourne un flot MCAL en cas de succès, et FALSE en cas d'erreur. 10.37.2 mcal_popen
int mcal_popen (string calendar, string username, string password, int options)
Returns an MCAL stream on success, false on error.
10.37.3 mcal_reopen
int mcal_reopen (string calendar, int options)
Réouvre une connexion MCAL.
10.37.4 mcal_close
int mcal_close (int mcal_stream, int flags)
Ferme la connexion.
10.37.5 mcal_fetch_event
object mcal_fetch_event (int mcal_stream, int event_id, int options)
mcal_fetch_event() recherche un évenement dans le calendrier
spécifié par id.
Tous les objets de date et heure sont construits comme suit :
10.37.6 mcal_list_events
array mcal_list_events (int mcal_stream, int begin_year , int begin_month , int begin_day , int end_year , int end_month , int end_day )
Retourne un tableau d'identifiants d'événéments, compris entre deux dates.
10.37.7 mcal_append_event
int mcal_append_event (int mcal_stream)
mcal_append_event() enregistre l'événement global
dans le calendrier MCAL mcal_stream.
10.37.8 mcal_store_event
int mcal_store_event (int mcal_stream)
mcal_store_event() enregistre l'événement global dans le
calendrier MCAL mcal_stream.
10.37.9 mcal_delete_event
int mcal_delete_event (int uid)
mcal_delete_event() efface l'événement d'identifiant
uid.
10.37.10 mcal_snooze
int mcal_snooze (int uid)
mcal_snooze() éteind l'alarme de l'événement identifié par
l'UID uid.
10.37.11 mcal_list_alarms
array mcal_list_events (int mcal_stream, int begin_year , int begin_month , int begin_day , int end_year , int end_month , int end_day )
Retourne un tableau d'identifiants, qui ont une alarme de prévue à la date
alarm_date. Si seul le flot MCAL est donné, la date de
début et de fin de la structure globale sera utilisée.
10.37.12 mcal_event_init
int mcal_event_init (int stream)
mcal_event_init() initialise la structure globale d'un flot.
Cela remet tous les éléments de la structure à 0, ou à leur valeur par défaut.
10.37.13 mcal_event_set_category
int mcal_event_set_category (int stream, string category)
mcal_event_set_category() fixe la catégorie de la structure
globale à la valeur de category.
10.37.14 mcal_event_set_title
int mcal_event_set_title (int stream, string title)
mcal_event_set_title() fixe le titre de la structure globale à
la valeur de title.
10.37.15 mcal_event_set_description
int mcal_event_set_description (int stream, string description)
mcal_event_set_description() fixe la catégorie de la structure
globale à la valeur de description.
10.37.16 mcal_event_set_start
int mcal_event_set_start (int stream, int year, int month, int day , int hour , int min , int sec )
mcal_event_set_start() fixe la date de début de la structure
globale.
10.37.17 mcal_event_set_end
int mcal_event_set_end (int stream, int year, int month, int day , int hour , int min , int sec )
mcal_event_set_end() fixe la date de fin de la structure
globale.
10.37.18 mcal_event_set_alarm
int mcal_event_set_alarm (int stream, int alarm)
mcal_event_set_alarm() fixe l'alarme de la structure globale,
à un nombre de minutes avant déclenchement.
10.37.19 mcal_event_set_class
int mcal_event_set_class (int stream, int class)
mcal_event_set_class() Fixe la classe de la structure globale.
La classe vaut 0 pour public, et 1 pour privée.
10.37.20 mcal_is_leap_year
int mcal_is_leap_year (int year)
mcal_is_leap_year() retoune 1 si l'année
year est bissextile, et 0 sinon.
10.37.21 mcal_days_in_month
int mcal_days_in_month (int month, int leap year)
mcal_days_in_month() retourne le nombre de jour du mois
month, et prend en compte le fait que l'année est
bissextile avec le paramètre leap year.
10.37.22 mcal_date_valid
int mcal_date_valid (int year, int month, int day)
mcal_date_valid() retourne TRUE si la date (constituée par
l'année year, le mois month et la
date day) est valide, et FALSE sinon.
10.37.23 mcal_time_valid
int mcal_time_valid (int hour, int minutes, int seconds)
mcal_time_valid() retourne TRUE si l'heure (constituée par
l'heure hour, les minutes minutes
et les secondes seconds) est une heure valide, et FALSE
sinon.
10.37.24 mcal_day_of_week
int mcal_day_of_week (int year, int month, int day)
mcal_day_of_week() retourne le jour de la semaine, pour la date
constituée par l'année year, le mois
month et la date day.
10.37.25 mcal_day_of_year
int mcal_day_of_year (int year, int month, int day)
mcal_day_of_year() retourne le numéro de jour dans l'année pour
la date constituée par l'année year, le mois
month et la date day.
10.37.26 mcal_date_compare
int mcal_date_compare (int a_year, int a_month, int a_day, int b_year, int b_month, int b_day)
mcal_date_compare() compares les deux dates données,
et retourne <0, 0, >0 si a<b, a==b, a>b respectivement.
10.37.27 mcal_next_recurrence
int mcal_next_recurrence (int stream, int weekstart, array next)
mcal_next_recurrence() retourne un objet contenant la prochaine
date de l'événement, ou la date de l'événement suivant la date.
Retourne un objet date vide si l'événement n'a pas de réoccurence, ou si
quelquechose est invalide. Utilisez weekstart pour
déterminer le premier jour.
10.37.28 mcal_event_set_recur_none
int mcal_event_set_recur_none (int stream)
mcal_event_set_recur_none() supprime la récurence de la
structure globale (event->recur_type est mis à MCAL_RECUR_NONE).
10.37.29 mcal_event_set_recur_daily
int mcal_event_set_recur_daily (int stream, int year, int month, int day, int interval)
mcal_event_set_recur_daily() fixe la récurence quotidienne de
la structure globale, jusqu'à la date passée en paramètre. (la date de début est
celle de la structure).
10.37.30 mcal_event_set_recur_weekly
int mcal_event_set_recur_weekly (int stream, int year, int month, int day, int interval, int weekdays)
mcal_event_set_recur_weekly() fixe la récurence hedbomadaire de
la structure globale, jusqu'à la date passée en paramètre. (la date de début est
celle de la structure).
10.37.31 mcal_event_set_recur_monthly_mday
int mcal_event_set_recur_monthly_mday (int stream, int year, int month, int day, int interval)
mcal_event_set_recur_monthly_mday() fixe la récurence de
la structure globale, jusqu'à la date passée en paramètre. (la date de début est
celle de la structure).
10.37.32 mcal_event_set_recur_monthly_wday
int mcal_event_set_recur_monthly_wday (int stream, int year, int month, int day, int interval)
mcal_event_set_recur_monthly_wday() fixe la récurence mensuelle
de la structure globale, jusqu'à la date passée en paramètre. (la date de début
est celle de la structure).
10.37.33 mcal_event_set_recur_yearly
int mcal_event_set_recur_yearly (int stream, int year, int month, int day, int interval)
mcal_event_set_recur_yearly() fixe la récurence annuelle de la
structure globale, jusqu'à la date passée en paramètre. (la date de début est
celle de la structure).
10.37.34 mcal_fetch_current_stream_event
int mcal_fetch_current_stream_event (int stream) mcal_fetch_current_stream_event() retourne la structure de la date du flot courant sous la forme d'un objet, qui contient :
Tous les objets de date et heure sont construits comme suit :
10.37.35 mcal_event_add_attribute
void mcal_event_add_attribute (int stream, string attribute, string value)
mcal_event_add_attribute() ajoute l'attribut attribute,
et lui donne la valeur de value.
10.37.36 mcal_expunge
int mcal_expunge (int stream)
mcal_expunge() efface tous les événements
marqués pour l'effacement.
10.38 Cryptage
Ces fonctions utilisent mcrypt.
<?php $key = "Cette cle est ultra secrete"; $input = "Rencontrons nous dans notre place secrete a 9 h 00."; $encrypted_data = mcrypt_ecb(MCRYPT_TripleDES, $key, $input, MCRYPT_ENCRYPT); ?>
Cet exemple va retourner les données cryptées dans la variable $encrypted_data.
10.38.1 mcrypt_get_cipher_name
string mcrypt_get_cipher_name (int cipher)
mcrypt_get_cipher_name() retourne le nom du chiffrement
utilisé.
<?php $cipher = MCRYPT_TripleDES; print mcrypt_get_cipher_name($cipher); ?>
TripleDES
10.38.2 mcrypt_get_block_size
int mcrypt_get_block_size (int cipher)
mcrypt_get_block_size() sert à lire la taille de bloc du
chiffrement cipher.
10.38.3 mcrypt_get_key_size
int mcrypt_get_key_size (int cipher)
mcrypt_get_key_size() sert à lire la taille de clé du
chiffrement cipher.
10.38.4 mcrypt_create_iv
string mcrypt_create_iv (int size, int source)
mcrypt_create_iv() sert à créer un IV
(vecteur d'initialisation).
<?php $cipher = MCRYPT_TripleDES; $block_size = mcrypt_get_block_size($cipher); $iv = mcrypt_create_iv($block_size, MCRYPT_DEV_RANDOM); ?>
10.38.5 mcrypt_cbc
string mcrypt_cbc (int cipher, string key, string data, int mode, string iv ) string mcrypt_cbc (string cipher, string key, string data, int mode, string iv )
La première syntaxe utilise libmcrypt 2.2.x, et la seconde utilise
libmcrypt 2.4.x.
10.38.6 mcrypt_cfb
string mcrypt_cfb (int cipher, string key, string data, int mode, string iv) string mcrypt_cfb (string cipher, string key, string data, int mode, string iv )
La première syntaxe utilise libmcrypt 2.2.x, et la seconde utilise
libmcrypt 2.4.x.
10.38.7 mcrypt_ecb
string mcrypt_ecb (int cipher, string key, string data, int mode) string mcrypt_ecb (string cipher, string key, string data, int mode, string iv )
La première syntaxe utilise libmcrypt 2.2.x, et la seconde utilise
libmcrypt 2.4.x.
10.38.8 mcrypt_ofb
string mcrypt_ofb (int cipher, string key, string data, int mode, string iv) string mcrypt_ofb (string cipher, string key, string data, int mode, string iv )
La première syntaxe utilise libmcrypt 2.2.x, et la seconde utilise
libmcrypt 2.4.x.
10.38.9 mcrypt_list_algorithms
array mcrypt_list_algorithms (string lib_dir )
mcrypt_list_algorithms() sert à lister tous les
algorithmes de chiffrement de lib_dir.
mcrypt_list_algorithms() prend un argument
optionnel, qui spécifie le dossier qui contient tous les
algorithmes. Si il est omis, la valeur de mcrypt.algorithms_dir dans
php.ini est utilisée.
<?php $algorithms = mcrypt_list_algorithms ("/usr/local/lib/libmcrypt"); foreach ($algorithms as $cipher) { echo $cipher."/n"; } ?>
10.38.10 mcrypt_list_modes
array mcrypt_list_modes (string lib_dir )
mcrypt_list_algorithms() sert à lister tous les
modes de chiffrement de lib_dir.
mcrypt_list_algorithms() prend un argument
optionnel, qui spécifie le dossier qui contient tous les
algorithmes. Si il est omis, la valeur de mcrypt.algorithms_dir dans
php.ini est utilisée.
<?php $modes = mcrypt_list_modes (); foreach ($modes as $mode) { echo $mode."/n"; } ?>
10.38.11 mcrypt_get_iv_size
int mcrypt_get_iv_size (string cipher, string mode)
mcrypt_get_iv_size() retourne la taille du
Vecteur d'initialisation (VI). En cas d'erreur, la fonction
retourne FALSE. Si le VI est ignoré dans le couple
chiffrement/mode demandé, zéro est retourné.
10.38.12 mcrypt_encrypt
string mcrypt_encrypt (string cipher, string key, string data, string mode, string iv )
mcrypt_encrypt() encrypte les données, et retourne
les données cryptées.
<?php $iv = mcrypt_create_iv (mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND); $key = "Ceci est une clé secrète"; $text = "Rencontrons nous à 11 heures, derrière le monument"; echo strlen ($text)."\n"; $crypttext = mcrypt_encrypt (MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv); echo strlen ($crypttext)."\n"; ?> L'exemple ci dessus affichera : 42 64
10.38.13 mcrypt_decrypt
string mcrypt_decrypt (string cipher, string key, string data, string mode, string iv )
Cipher est une constante MCRYPT_ciphername
qui indique le nom de l'algorithme sous forme de chaîne.
10.38.14 mcrypt_module_open
resource mcrypt_module_open (string algorithm, string algorithm_directory, string mode, string mode_directory)
Cette fonction ouvre le module de l'algorithme et du mode à utiliser.
Le nom de l'algorithme est specifié par le paramètre algorithm
(par exemple : "twofish"), ou bien une des constantes MCRYPT_ciphername.
La librairie est refermée en appelant @xref{function.mcrypt-module-close , , mcrypt_module_close()},
mais il n'est pas nécessaire d'appeler cette fonction si
mcrypt_generic_end() est utilisé. Normalement,
cette fonction retourne un pointeur d'encryption, ou bien
FALSE en cas d'erreur.
<?php $td = mcrypt_module_open (MCRYPT_DES, "", MCRYPT_MODE_ECB, "/usr/lib/mcrypt-modes"); ?>
L'exemple ci dessus va essayer d'ouvrir le module de chiffrement par
DES, dans le dossier par défaut, et le mode EBC dans le dossier
/usr/lib/mcrypt-modes.
10.38.15 mcrypt_generic_init
int mcrypt_generic_init (resource td, string key, string iv)
La taille maximale de la clé doit être cette retournée par
mcrypt_enc_get_key_size() et toutes les valeurs
inférieures seront aussi valides. Le vecteur d'initialisation (VI)
doit avoir la taille d'un bloc, mais vous devez lire sa taille
en appelant mcrypt_enc_get_iv_size().
IV est ignoré en mode ECB. IV DOIT exister en modes CFB, CBC, STREAM, nOFB
et OFB. Il doit être aléatoire et unique (mais pas secret).
Le même VI doit être utilisé pour le cryptage et le décryptage.
Si vous ne voulez pas l'utiliser, remplissez le de zéros, mais
ce n'est pas recommandé. La fonction retourne (-1) en cas d'erreur.
10.38.16 mcrypt_generic
string mcrypt_generic (resource td, string data)
mcrypt_generic() crypte des données.
Les données sont complétées par des "\0" pour obtenir une
taille de n fois la taille d'un bloc. Elle retourne les données
encryptées. Notez que la longueur de la chaîne retournée
peut être plus longue que celle passée en argument, à cause
du complément.
10.38.17 mdecrypt_generic
string mdecrypt_generic (resource td, string data)
mdecrypt_generic(). Notez que la longueur de
la chaîne décryptée peut être plus longue que la chaîne originale,
car elle peut avoir été complétée par des "\0".
<?php $iv_size = mcrypt_enc_get_iv_size ($td)); $iv = @mcrypt_create_iv ($iv_size, MCRYPT_RAND); if (@mcrypt_generic_init ($td, $key, $iv) != -1) { $c_t = mcrypt_generic ($td, $plain_text); @mcrypt_generic_init ($td, $key, $iv); $p_t = mdecrypt_generic ($td, $c_t); } if (strncmp ($p_t, $plain_text, strlen($plain_text)) == 0) echo "ok"; else echo "erreur"; ?>
L'exemple ci dessus montre comment vérifier que les données avant
cryptage sont bien les mêmes que celles après cryptage/décryptage.
10.38.18 mcrypt_generic_end
bool mcrypt_generic_end (resource td)
mcrypt_generic_end() termine le cryptage
désigné par le pointeur td. En fait,
elle supprime tous les buffers, et ferme les modules utilisés.
Elle retourne FALSE en cas d'erreur, et TRUE sinon.
10.38.19 mcrypt_enc_self_test
int mcrypt_enc_self_test (resource td)
mcrypt_enc_self_test() effectue un test du
module ouvert et désigné par td. Si le
test est concluant, elle retourne 0, sinon, 1.
10.38.20 mcrypt_enc_is_block_algorithm_mode
int mcrypt_enc_is_block_algorithm_mode (resource td)
mcrypt_enc_is_block_algorithm_mode() retourne 1
si ce mode utilise des algorithmes par blocs, et 0 sinon.
(i.e. 0 pour stream, et 1 pour cbc, cfb, ofb).
10.38.21 mcrypt_enc_is_block_algorithm
int mcrypt_enc_is_block_algorithm (resource td)
mcrypt_enc_is_block_algorithm() retourne 1 si
l'algorithme utilisé est un algorithme par bloc, et 0
si c'est un algorithme par flot.
10.38.22 mcrypt_enc_is_block_mode
int mcrypt_enc_is_block_mode (resource td)
mcrypt_enc_is_block_mode() retourne 1 si
le mode retourne des blocs d'octets, ou bien 0 si il retourne
des octets (par flot). (i.e. 1 pour cbc et ecb, et 0 pour cfb et
stream).
10.38.23 mcrypt_enc_get_block_size
int mcrypt_enc_get_block_size (resource td)
mcrypt_enc_get_block_size() retourne la taille
de blocs d'un algorithme en octets.
10.38.24 mcrypt_enc_get_key_size
int mcrypt_enc_get_key_size (resource td)
mcrypt_enc_get_key_size() retourne la taille
maximale de clé acceptée par le mode désigné par td,
en octets.
10.38.25 mcrypt_enc_get_supported_key_sizes
array mcrypt_enc_get_supported_key_sizes (resource td)
mcrypt_enc_get_supported_key_sizes() retourne un
tableau contenant les tailles des clés supportées par l'algorithme
désigné par td. Si il retourne un tableau vide,
c'est que toutes les clés entre 1 et mcrypt_enc_get_key_size()
sont acceptées par l'algorithme.
10.38.26 mcrypt_enc_get_iv_size
int mcrypt_enc_get_iv_size (resource td)
mcrypt_enc_get_iv_size() retourne la
taille du VI de l'algorithme désigné par td,
en octets. Si la valeur retournée est 0, c'est que l'algorithme
ne demande pas de VI. Un VI est demandé en mode cbc, cfb et ofb,
et parfois en mode stream.
10.38.27 mcrypt_enc_get_algorithms_name
string mcrypt_enc_get_algorithms_name (resource td)
mcrypt_enc_get_algorithms_name() retourne le nom de
l'algorithme désigné par td.
10.38.28 mcrypt_enc_get_modes_name
string mcrypt_enc_get_modes_name (resource td)
mcrypt_enc_get_modes_name() retourne le nom du
mode désigné par td.
10.38.29 mcrypt_module_self_test
bool mcrypt_module_self_test (string algorithm, string lib_dir)
mcrypt_module_self_test() effectue un
test sur l'algorithme spécifié. Le paramètre optionnel
lib_dir contient le chemin jusqu'au module
de l'algorithme sur le système.
10.38.30 mcrypt_module_is_block_algorithm_mode
bool mcrypt_module_is_block_algorithm_mode (string mode, string lib_dir)
mcrypt_module_is_block_algorithm_mode() retourne TRUE
si le mode doit être utilisé avec un algorithme par bloc, sinon
retourne 0 (i.e. 0 pour stream, et 1 pour cbc, cfb, ofb). Le paramètre optionnel
lib_dir contient le chemin jusqu'au module
de l'algorithme sur le système.
10.38.31 mcrypt_module_is_block_algorithm
bool mcrypt_module_is_block_algorithm (string algorithm, string lib_dir)
mcrypt_module_is_block_algorithm() retourne TRUE
si algorithm est un algorithme par bloc, sinon
retourne 0. Le paramètre optionnel lib_dir contient
le chemin jusqu'au module de l'algorithme sur le système.
10.38.32 mcrypt_module_is_block_mode
bool mcrypt_module_is_block_mode (string mode, string lib_dir)
mcrypt_module_is_block_mode() retourne TRUE si
ce mode fournit des blocs d'octets, ou bien un flot d'octets.
(i.e. 1 pour cbc et ecb, et 0 pour cfb et stream). Le paramètre optionnel
lib_dir contient le chemin jusqu'au module de
l'algorithme sur le système.
10.38.33 mcrypt_module_get_algo_block_size
int mcrypt_module_get_algo_block_size (string algorithm, string lib_dir)
mcrypt_module_get_algo_block_size() retourne la taille
de bloc d'un algorithme, en octets. Le paramètre optionnel
lib_dir contient le chemin jusqu'au module de
l'algorithme sur le système.
10.38.34 mcrypt_module_get_algo_key_size
int mcrypt_module_get_algo_key_size (string algorithm, string lib_dir)
mcrypt_module_get_algo_key_size() retourne la taille
maximale de la clé supporté par l'algorithme algorithm.
Le paramètre optionnel lib_dir contient le chemin
jusqu'au module de l'algorithme sur le système.
10.39 Hash
Ces fonctions ont été prévues pour fonctionner avec
mhash.
<?php $input = "Rencontrons nous à 9h00 dans notre repaire secret.";"; $hash = mhash(MHASH_SHA1, $input); print "Le hash est ".bin2hex($hash)."\n"; ?> Cela va produire quelque chose du type (Note du Traducteur : c'est le hash de la version anglaise) Le hash est d3b85d710d8f6e4e5efd4d5e67d041f9cecedafe
Pour avoir une liste complète des hash supportés, reportez vous à la documentation
de mhash. En règle générale, vous pouvez utiliser un algorithme de hash avec le
type : MHASH_NOMDEHASH. Par exemple pour utiliser HAVAL vous devez spécifier la
constante PHP MHASH_HAVAL.
10.39.1 mhash_get_hash_name
string mhash_get_hash_name (int hash)
mhash_get_hash_name() sert à connaitre le nom d'un hash.
<?php $hash = MHASH_MD5; print mhash_get_hash_name($hash); ?> L'exemple ci dessus va afficher : MD5
10.39.2 mhash_get_block_size
int mhash_get_block_size (int hash)
mhash_get_block_size() sert à connaitre la taille de bloc du
hash specifié hash.
10.39.3 mhash_count
int mhash_count (void )
mhash_count() retourne l'identifiant de hash maximal. Les hash
sont numérotés de 0 jusqu'à cet identifiant.
<?php $nr = mhash_count(); for($i = 0; $i <= $nr; $i++) { echo sprintf("The blocksize of %s is %d\n", mhash_get_hash_name($i), mhash_get_block_size($i)); } ?>
10.39.4 mhash
string mhash (int hash, string data)
mhash() applique la fonction de hash hash
aux données data et retourne le résultat.
10.40 Diverses
Ces fonctions ont été placées là, car elles ne rentraient dans aucune catégorie
adéquate.
10.40.1 connection_aborted
int connection_aborted (void )
Retourne TRUE si le client a abandonné la connexion. Reportez vous à
8.1 Gestion des connexions
du chapitre 8 Caractéristiques.
10.40.2 connection_status
int connection_status (void )
Retourne les bits de status de la connexion. Reportez vous à la section
8.1 Gestion des connexions
pour plus de détails.
10.40.3 connection_timeout
int connection_timeout (void )
Retourne TRUE si le script a expiré. Reportez vous à la section
8.1 Gestion des connexions
pour plus de détails.
10.40.4 define
int define (string name, mixed value, int case_insensitive ) Définit une constante, de la même façon qu'une variable, sauf que :
<?php define ("CONSTANT", "Bonjour le monde."); echo CONSTANT; // affiche "Bonjour le monde." ?>
10.40.5 defined
int defined (string name)
Retourne TRUE si la constante nommée name a été
définie, et FALSE sinon.
10.40.6 die
void die (string message)
Cette fonction affiche la chaîne passée en paramètre, puis termine l'exécution
du script. Il ne retourne rien de plus.
<?php $filename = '/path/to/data-file'; $file = fopen ($filename, 'r') or die("impossible d'ouvrir le fichier ($filename)"); ?>
10.40.7 eval
void eval (string code_str)
eval() évalue la chaîne code_str
comme un script PHP. Parmi les utilisations possibles, cette fonction permet
de stocker du code dans une base de données, pour utilisation ultérieure.
<?php $string = 'tasse'; $name = 'cafe'; $str = 'Ceci est une $string avec mon $name dedans.<br>'; echo $str; eval( "\$str = \"$str\";" ); echo $str; ?>
Ceci est une $string avec mon $name dedans. Ceci est une tasse avec mon cafe dedans.
10.40.8 exit
void exit
Cette fonction termine l'analyse d'un script en cours d'exécution. Elle ne
renvoie aucune valeur.
10.40.9 get_browser
object get_browser (string user_agent )
get_browser() essaie de determiner les capacités du navigateur
client. Cela se fait en lisant les informations dans le fichier
`browscap.ini'. Par défaut, la valeur de $HTTP_USER_AGENT est
utilisée. Cependant, vous pouvez passer n'importe quelle valeur avec le paramètre
optionnel user_agent à get_browser().
<?php function list_array ($array) { while (list ($key, $value) = each ($array)) { $str .= "<b>$key:</b> $value<br>\n"; } return $str; } echo "$HTTP_USER_AGENT<hr>\n"; $browser = get_browser(); echo list_array ((array) $browser); ?>
Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586)<hr> <b>browser_name_pattern:</b> Mozilla/4\.5.*<br> <b>parent:</b> Netscape 4.0<br> <b>platform:</b> Unknown<br> <b>majorver:</b> 4<br> <b>minorver:</b> 5<br> <b>browser:</b> Netscape<br> <b>version:</b> 4<br> <b>frames:</b> 1<br> <b>tables:</b> 1<br> <b>cookies:</b> 1<br> <b>backgroundsounds:</b> <br> <b>vbscript:</b> <br> <b>javascript:</b> 1<br> <b>javaapplets:</b> 1<br> <b>activexcontrols:</b> <br> <b>beta:</b> <br> <b>crawler:</b> <br> <b>authenticodeupdate:</b> <br> <b>msn:</b> <br>
Pour fonctionner, votre configuration 7.1.13 Directives de configuration du navigateur.
doit mener au fichier `browscap.ini'.
10.40.10 highlight_file
void highlight_file (string filename)
highlight_file() affiche la syntaxe colorisée du
fichier filename, en utilisant les couleurs
définies dans le moteur interne de PHP.
Pour configurer une URL qui peut coloriser n'importe quel script que vous lui passez, nous avons besoin d'utiliser la directive Apache "ForceType", pour généer une URL exploitable, puis utiliser la fonction highlight_file() pour afficher un code propre.
10.40.11 highlight_string
void highlight_string (string str)
highlight_string() affiche la version colorisée
de la chaîne str, en utilisant les couleurs
définies dans le moteur interne de PHP.
10.40.12 ignore_user_abort
int ignore_user_abort (int setting )
Cette fonction active l'option décidant si, lors de la déconnexion du client,
le script doit poursuivre son exécution ou non. La fonction renvoie le paramétrage
précédent et elle peut être appelée sans argument pour ne pas changer le
paramétrage courant. Voir le paragraphe gestion des connexions dans le chapitre
caractéristiques pour une description plus complète des manipulations de connexion
en PHP.
10.40.13 iptcparse
array iptcparse (string iptcblock)
Analyse un bloc binaire IPTC et recherche les balises simples. Elle retourne un
tableau avec les balises comme index, et les valeurs dans les valeurs de tableau
correspondantes. En cas d'erreur, ou si aucune balise IPTC n'a été trouvée,
retourne FALSE. Voir getimagesize() pour un exemple.
10.40.14 leak
void leak (int bytes)
leak() crée une fuite de mémoire.
10.40.15 pack
string pack (string format, mixed args ... )
Compacte les arguments dans une chaîne binaire, suivant le format
format. Retourne la chaîne binaire.
$binarydata = pack ("nvc*", 0x1234, 0x5678, 65, 66);La chaîne binaire résultante aura 6 octets de long, et contiendra la séquence 0x12, 0x34, 0x78, 0x56, 0x41, 0x42.
10.40.16 show_source
void show_source (string filename)
show_source() affiche la syntaxe colorisée du
fichier filename, en utilisant les couleurs
définies dans le moteur interne de PHP.
10.40.17 sleep
void sleep (int seconds)
La fonction sleep retarde l'exécution du programme pendant
seconds secondes.
10.40.18 uniqid
int uniqid (string prefix, boolean lcg )
uniqid() retourne un identifiant préfixé unique, basé sur
l'heure courante, en micro-secondes. Le préfixe peut servir à identifier facilement
différents hôtes, si vous générez simultanément des fichiers depuis plusieurs hôtes,
à la même micro-seconde. prefix peut prendre jusqu'à 114
caractères.
$token = md5 (uniqid ("")); // pas de section aléatoire. $better_token = md5 (uniqid (rand())); // mieux, difficile à deviner
10.40.19 unpack
array unpack (string format, string data)
unpack() déconditionne des données depuis une chaîne binaire
avec le format format.
Retourne un tableau contenant les éléments déconditionnés.
$array = unpack ("c2chars/nint", $binarydata);Le tableau résultant contiendra les entrées suivantes : "chars1", "chars2" et "int".
10.40.20 usleep
void usleep (int micro_seconds)
La sleep() retarde l'exécution du programme pendant
micro_seconds micro-secondes.
10.41 mSQL
10.41.1 msql
int msql (string database, string query, int link_identifier)
Retourne un identifiant positif de résultat de requête, ou FALSE en cas d'erreur.
10.41.2 msql_affected_rows
int msql_affected_rows (int query_identifier)
Retourne le nombre de lignes affectées par la dernière commande INSERT, UPDATE
ou DELETE sur le serveur associé au link_identifier.
Si ce dernier níest pas précisé, la dernière connexion est utilisée.
10.41.3 msql_close
int msql_close (int link_identifier)
Retourne TRUE en cas de succès, FALSE en cas d'erreur.
10.41.4 msql_connect
int msql_connect (string hostname)
Retourne un identifiant de connexion positif en cas de succès, et FALSE sinon.
10.41.5 msql_create_db
int msql_create_db (string database name, int link_identifier )
msql_create_db() essaie de créer une nouvelle base de données
sur le serveur référencé par l'identifiant
link_identifier.
10.41.6 msql_createdb
int msql_createdb (string database name, int link_identifier )
Identique à msql_create_db().
10.41.7 msql_data_seek
int msql_data_seek (int query_identifier, int row_number)
Retourne TRUE en cas de succès, et FALSE en cas d'échec.
10.41.8 msql_dbname
string msql_dbname (int query_identifier, int i)
msql_dbname() retourne le nom de la base de données enregistré en position i
du pointeur de résultat retourné par la fonction msql_listdbs().
La fonction msql_numrows() peut être utilisée pour déterminer
le nombre de nom de bases disponibles.
10.41.9 msql_drop_db
int msql_drop_db (string database_name, int link_identifier)
Retourne TRUE en cas de succès, et FALSE en cas d'échec.
10.41.10 msql_dropdb
Voir msql_drop_db().
10.41.11 msql_error
string msql_error ( )
Les erreurs générées par mSQL ne sont plus traitées comme des alertes. Au lieu de
cela, elles sont stockées, et accessibles à partir de cette fonction.
10.41.12 msql_fetch_array
int msql_fetch_array (int query_identifier, int result_type )
Retourne un tableau qui contient la ligne demandée, ou FALSE, si il n'y a pas
d'autres lignes.
10.41.13 msql_fetch_field
object msql_fetch_field (int query_identifier, int field_offset)
Retourne un objet contenant les informations sur un champs.
10.41.14 msql_fetch_object
int msql_fetch_object (int query_identifier, int result_type )
Retourne un objet, dont les propriétés seront affectées suivant les champs de la
ligne lue, ou FALSE si il ne reste plus de lignes.
10.41.15 msql_fetch_row
array msql_fetch_row (int query_identifier)
Retourne un tableau qui contient la ligne demandée, ou FALSE, si il n'y a plus de
lignes à lire.
10.41.16 msql_fieldname
string msql_fieldname (int query_identifier, int field)
msql_fieldname() retourne le nom du champs à l'index
field. query_identifier est un
identifiant de résultat, et field est un index de champs.
msql_fieldname($result, 2); retournera le nom du deuxième
champs, dans le résultat associé à query_identifier.
10.41.17 msql_field_seek
int msql_field_seek (int query_identifier, int field_offset)
Recherche l'offset du champs field_offset. Le prochain
appel à msql_fetch_field() qui d'aura pas d'argument
field_offset, retournera ce champs.
10.41.18 msql_fieldtable
int msql_fieldtable (int query_identifier, int field)
Retourne le nom de la table d'ou est le champs field a
été extrait.
10.41.19 msql_fieldtype
string msql_fieldtype (int query_identifier, int i)
msql_fieldtype() est similaire à
msql_fieldname(). Les arguments sont identiques, mais c'est le
type du champs qui est retourné. Cela produira un résultat tel que "int",
"string" ou "real".
10.41.20 msql_fieldflags
string msql_fieldflags (int query_identifier, int i)
msql_fieldflags() retourne le flag du champs spécifié.
Actuellement, il peut valoir soit "not null", "primary key", ou une combinaison
des deux ou "" (chaîne vide).
10.41.21 msql_fieldlen
int msql_fieldlen (int query_identifier, int i)
msql_fieldlen() retourne la longueur d'un champs.
10.41.22 msql_free_result
int msql_free_result (int query_identifier)
msql_free_result() Libère de la mémoire le résultat associé à
l'identifiant de résultat query_identifier. Lorsque PHP a
terminé une requête, cette mémoire est libérée, ce qui fait que vous n'aurez pas
besoin de cette fonction. Vous pouvez toujours l'utiliser pour vous assurez
que vous n'utilisez pas trop de mémoire durant un script.
10.41.23 msql_freeresult
Voir msql_free_result() 10.41.24 msql_list_fields
int msql_list_fields (string database, string tablename)
msql_list_fields() lit les informations de la table donnée.
Les arguments sont le nom de la base de données, et le nom de la table.
Cette fonction retourne un identifiant de résultat qui sera utilisé avec
msql_fieldflags(), msql_fieldlen(),
msql_fieldname() et msql_fieldtype().
Un identifiant de résultat est un entier positif. La fonction retourne -1 si une
erreur survient. Une chaîne décrivant l'erreur sera placée dans la variable
$phperrmsg, et à moins que cette fonction n'ai été appelée avec
(@msql_list_fields()), alors cette erreur sera affichée.
10.41.25 msql_listfields
Voir msql_list_fields().
10.41.26 msql_list_dbs
int msql_list_dbs
msql_list_dbs() retournea un pointeur de résultat,
qui contiendra les noms des bases de données disponibles sur la connexion mSQL
courante. Utilisez msql_dbname()pour passer en revue toutes
les lignes.
10.41.27 msql_listdbs
Voir msql_list_dbs().
10.41.28 msql_list_tables
int msql_list_tables (string database)
msql_list_tables() prend un nom de base de données, et
fourni un résultat, un peu comme la fonction msql().
La fonction msql_tablename() devrait être utilisée de préférence
pour extraire les nom de table d'un pointeur de résultat.
10.41.29 msql_listtables
Voir msql_list_tables().
10.41.30 msql_num_fields
int msql_num_fields (int query_identifier)
msql_num_fields() retourne le nombre de champs du résultat
associé à l'identifiant query_identifier.
10.41.31 msql_num_rows
int msql_num_rows (int query_identifier)
msql_num_rows() retourne le nombre de lignes du résultat
associé à l'identifiant query_identifier.
10.41.32 msql_numfields
int msql_numfields (int query_identifier)
Identique à msql_num_fields().
10.41.33 msql_numrows
int msql_numrows
Identique à msql_num_rows().
10.41.34 msql_pconnect
int msql_pconnect (string hostname)
Retourne un identifiant de connexion persistante à un serveur mSQL en cas de
succès, et FALSE sinon.
10.41.35 msql_query
int msql_query (string query, int link_identifier)
msql_query() envoie une requête à la base de donnée active,
sur le serveur associé à l'identifiant de connexion
link_identifier.
Si link_identifier n'est pas fourni, PHP tentera d'utiliser
la dernière connexion ouverte. Si aucune connexion n'a été ouverte, la fonction
tentera de se connecter par elle même, avec msql_connect()
appelé sans argument.
10.41.36 msql_regcase
Voir sql_regcase().
10.41.37 msql_result
int msql_result (int query_identifier, int i, mixed field)
Retourne la valeur de la cellule, à la ligne i et l'offset
spécifié, fielddans le résultat mSQL
query_identifier.
10.41.38 msql_select_db
int msql_select_db (string database_name, int link_identifier)
Retourne TRUE en cas de succès, et FALSE en cas d'erreur.
10.41.39 msql_selectdb
Voir msql_select_db().
10.41.40 msql_tablename
string msql_tablename (int query_identifier, int field) msql_tablename() prend un pointeur de résultat (retourné par la fonction msql_list_tables()), ainsi qu'un index, et retourne le nom d'une table. La fonction msql_numrows() peut servir à déterminer le nombre de table dans le pointeur de résultat. Exemple msql_tablename() <?php msql_connect ("localhost"); $result = msql_list_tables ("wisconsin"); $i = 0; while ($i < msql_numrows ($result)) { $tb_names[$i] = msql_tablename ($result, $i); echo $tb_names[$i] . "<BR>"; $i++; } ?>
10.42 Microsoft SQL Server
10.42.1 mssql_close
int mssql_close (int link_identifier )
Retourne TRUE en cas de succès, ou FALSE sinon.
10.42.2 mssql_connect
int mssql_connect (string servername , string username , string password )
Retourne un identifiant positif de lien en cas de succès, et FALSE sinon.
10.42.3 mssql_data_seek
int mssql_data_seek (int result_identifier, int row_number)
Retourne TRUE en cas de succès, FALSE en cas d'échec.
10.42.4 mssql_fetch_array
int mssql_fetch_array (int result)
Retourne un tableau qui contient les valeurs de la ligne lues, en cas de succès,
et FALSE en cas d'échec.
10.42.5 mssql_fetch_field
object mssql_fetch_field (int result, int field_offset )
Retourne un objet contenant les informations sur un champs.
Voir aussi mssql_field_seek().
10.42.6 mssql_fetch_object
int mssql_fetch_object (int result)
Retourne un objet dont les propriétés contiennent les valeurs de la ligne, ou
FALSE si il n'y a plus de ligne.
10.42.7 mssql_fetch_row
array mssql_fetch_row (int result)
Retourne un tableau qui contient les valeurs de la ligne à lire, ou bien FALSE si
il n'y a plus de lignes à lire.
10.42.8 mssql_field_length
int mssql_field_length (int result, int offset )
10.42.9 mssql_field_name
int mssql_field_name (int result, int offset )
10.42.10 mssql_field_seek
int mssql_field_seek (int result, int field_offset)
Modifie la valeur du pointeur de champs. le prochain appel à
mssql_fetch_field() qui ne précisera pas de numéro de champs,
le champs fixé par mssql_field_seek() sera retournée.
10.42.11 mssql_field_type
string mssql_field_type (int result, int offset )
10.42.12 mssql_free_result
int mssql_free_result (int result)
mssql_free_result() n'a besoin d'être appelé que si on craint
d'utiliser trop de mémoire durant une opération. Toutes les ressources liées à un
résultat seront libérés par mssql_free_result().
10.42.13 mssql_get_last_message
string mssql_get_last_message (void )
10.42.14 mssql_min_error_severity
void mssql_min_error_severity (int severity)
10.42.15 mssql_min_message_severity
void mssql_min_message_severity (int severity)
10.42.16 mssql_num_fields
int mssql_num_fields (int result)
mssql_num_fields() retourne le nombre de champs dans un
résultat.
10.42.17 mssql_num_rows
int mssql_num_rows (string result)
mssql_num_rows() retourne le nombre de lignes dans un
résultat.
10.42.18 mssql_pconnect
int mssql_pconnect (string servername , string username , string )
Retourne un identifiant positif de lien MS SQL en cas de succès, et FALSE
en cas d'erreur.
10.42.19 mssql_query
int mssql_query (string query, int link_identifier )
Retourne un identifiant positif de résultat en cas de succès, ou FALSE sinon.
10.42.20 mssql_result
int mssql_result (int result, int i, mixed field)
Retourne la valeur de la colonne, à la ligne donnée, dans le résultat MS SQL,
ou FALSE en cas d'erreur.
10.42.21 mssql_select_db
int mssql_select_db (string database_name, int link_identifier )
Retourne TRUE en cas de succès, et FALSE en cas d'erreur.
10.43 MySQL
Ces fonctions vous permettent d'accéder aux bases de données MySQL.
10.43.1 mysql_affected_rows
int mysql_affected_rows (int link_identifier )
mysql_affected_rows() retourne le nombre de lignes affectées
lors de la dernière requête INSERT, UPDATE ou DELETE sur le serveur associé à
l'identifiant de connexion. Si cet identifiant n'est pas précisé, cette fonction
utilise la dernière connexion ouverte.
10.43.2 mysql_change_user
int mysql_change_user (string user, string password, string database , int link_identifier )
mysql_change_user() change l'utilisateur en cours de la session
active, ou sur la connexion spécifiée avec l'option
link_identifier
Si une base est spécifiée, elle deviendra la base par défaut de l'utilisateur.
Si une erreur de connexion survient, la connexion en cours restera active.
10.43.3 mysql_close
int mysql_close (int link_identifier )
Retourne TRUE en cas de succès, et FALSE sinon.
<?php $link = mysql_connect ("kraemer", "marliesle", "secret") or die ("Impossible de se connecter"); print ("Connexion réussie"); mysql_close ($link); ?>
Voir aussi mysql_connect() et mysql_pconnect().
10.43.4 mysql_connect
int mysql_connect (string hostname :port :/path/to/socket , string username , string password )
Retourne un identifiant positif de connexion en cas de succès, et sinon FALSE.
<?php $link = mysql_connect ("kraemer", "marliesle", "secret") { or die ("Connexion impossible"); } print ("Connexion réussie"); mysql_close ($link); ?>
Voir aussi mysql_pconnect() et mysql_close().
10.43.5 mysql_create_db
int mysql_create_db (string database name, int link_identifier )
mysql_create_db() tente de créer une nouvelle base de données
sur le serveur associé à l'identifiant link_identifier,
ou la dernière connexion ouverte.
<?php $link = mysql_pconnect ("kron", "jutta", "geheim") { or die ("Connexion impossible"); } if (mysql_create_db ("my_db")) { print ("Base de données créée\n"); } else { printf ("Erreur lors de la création de la base: %s\n", mysql_error()); } ?>
Pour des raisons de compatibilité ascendante, mysql_createdb() est toujours
utilisable.
10.43.6 mysql_data_seek
int mysql_data_seek (int result_identifier, int row_number)
Retourne TRUE en cas de succès, et FALSE sinon.
<?php $link = mysql_pconnect ("kron", "jutta", "geheim") { or die ("Connexion impossible"); } mysql_select_db ("samp_db") { or die ("Selection de base impossible"); } $query = "SELECT last_name, first_name FROM friends"; $result = mysql_query ($query) { or die ("Requête impossible"); } # récupère les lignes dans l'ordre inverse for ($i = mysql_num_rows ($result) - 1; $i >=0; $i--) { if (!mysql_data_seek ($result, $i)) { printf ("Impossible d'atteindre la ligne %d\n", $i); continue; } if(!($row = mysql_fetch_object ($result))) continue; printf ("%s %s<BR>\n", $row->last_name, $row->first_name); } mysql_free_result ($result); ?> 10.43.7 mysql_db_query
int mysql_db_query (string database, string query, int link_identifier )
Retourne un identifiant de résultat si la requête réussi, et FALSE sinon.
10.43.8 mysql_drop_db
int mysql_drop_db (string database_name, int link_identifier )
Retourne TRUE en cas de succès, et FALSE sinon.
10.43.9 mysql_errno
int mysql_errno (int link_identifier ) Les erreurs qui sont remontées depuis le serveur MySQL ne sont plus des alertes. A la place, il faut utiliser cette fonction pour obtenir le numéro d'erreur. <?php mysql_connect("marliesle"); echo mysql_errno().": ".mysql_error()."<BR>"; mysql_select_db("nonexistentdb"); echo mysql_errno().": ".mysql_error()."<BR>"; $conn = mysql_query("SELECT * FROM nonexistenttable"); echo mysql_errno().": ".mysql_error()."<BR>"; ?>
10.43.10 mysql_error
string mysql_error (int link_identifier ) Les erreurs générées par mySQL ne se transforment plus en alerte. A la place, elles sont accessibles via ces fonctions : <?php mysql_connect("marliesle"); echo mysql_errno().": ".mysql_error()."<BR>"; mysql_select_db("nonexistentdb"); echo mysql_errno().": ".mysql_error()."<BR>"; $conn = mysql_query("SELECT * FROM nonexistenttable"); echo mysql_errno().": ".mysql_error()."<BR>"; ?>
10.43.11 mysql_fetch_array
array mysql_fetch_array (int result, int result_type )
Retourne un tableau qui contient la ligne demandée, ou FALSE si il ne reste plus
de ligne.
select t1.f1 as foo t2.f1 as bar from t1, t2
<?php mysql_connect($host,$user,$password); $result = mysql_db_query("database","select * from table"); while($row = mysql_fetch_array($result)) { echo $row["user_id"]; echo $row["fullname"]; } mysql_free_result($result); ?> 10.43.12 mysql_fetch_field
object mysql_fetch_field (int result, int field_offset )
Retourne un objet contenant les données.
10.43.13 mysql_fetch_lengths
array mysql_fetch_lengths (int result)
Retourne un tableau avec la taille de chaque colonne de la dernière ligne retournée
par mysql_fetch_row(), sinon FALSE.
10.43.14 mysql_fetch_object
object mysql_fetch_object (int result, int result_typ )
Retourne un objet dont les propriétés correspondent à une ligne d'un résultat,
ou FALSE si il n'y a plus d'autres lignes.
<?php mysql_connect($host,$user,$password); $result = mysql_db_query("database","select * from table"); while($row = mysql_fetch_object($result)) { echo $row->user_id; echo $row->fullname; } mysql_free_result($result); ?>
10.43.15 mysql_fetch_row
array mysql_fetch_row (int result)
Retourne un tableau énuméré qui correspond à la ligne demandée, ou FALSE
si il ne reste plus de ligne.
10.43.16 mysql_field_name
string mysql_field_name (int result, int field_index)
mysql_field_name() retourne le nom d'une colonne.
Les arguments de la fonction sont un identifiant de résultat
result et l'index du champs,
ie.mysql_field_name($result,2);
10.43.17 mysql_field_seek
int mysql_field_seek (int result, int field_offset)
Place le pointeur de résultat sur le champs spécifié. Lors du prochain appel à
mysql_fetch_field() qui n'aura pas d'argument d'index de
champs, le champs désormais pointé sera retourné.
10.43.18 mysql_field_table
string mysql_field_table (int result, int field_offset)
Retourne le nom de la table oú se trouve une colonne. Pour des raisons de
compatibilité ascendante, mysql_fieldtable() peut encore être utilisé.
10.43.19 mysql_field_type
string mysql_field_type (int result, int field_offset) mysql_field_type() est similaire à la fonction mysql_field_name(). Les arguments sont identiques, mais c'est le type du champs qui est retourné. Il vaudra "int", "real", "string", "blob", ou d'autres, comme détaillé dans la documentation MySQL. Types mysql field <?php mysql_connect("localhost:3306"); mysql_select_db("wisconsin"); $result = mysql_query("SELECT * FROM onek"); $fields = mysql_num_fields($result); $rows = mysql_num_rows($result); $i = 0; $table = mysql_field_table($result, $i); echo "Your '".$table."' table has ".$fields." fields et ".$rows." records <BR>"; echo "The table has the following fields <BR>"; while ($i < $fields) { $type = mysql_field_type ($result, $i); $name = mysql_field_name ($result, $i); $len = mysql_field_len ($result, $i); $flags = mysql_field_flags ($result, $i); echo $type." ".$name." ".$len." ".$flags."<BR>"; $i++; } mysql_close(); ?>
10.43.20 mysql_field_flags
string mysql_field_flags (int result, int field_offset)
mysql_field_flags() retourne le sémaphore associé au champs
spécifié par field_offset. Les sémaphores sont retournés
comme des mots, séparés par des espaces, ce qui les rend facile à séparer, avec la
commande explode().
10.43.21 mysql_field_len
int mysql_field_len (int result, int field_offset)
mysql_field_len() retourne la taille du champs spécifié.
10.43.22 mysql_free_result
int mysql_free_result (int result)
mysql_free_result() n'est à appeler que si vous avez peur
d'utiliser trop de mémoire durant l'exécution de votre script. Toute la mémoire
associée à l'identifiant de résultat sera automatiquement libérée.
10.43.23 mysql_insert_id
int mysql_insert_id (int link_identifier )
mysql_insert_id() retourne le dernier identifiant généré par
un champs de type AUTO_INCREMENTED. Cette fonction ne prend aucun argument. Elle
retourne le dernier identifiant généré par la dernière fonction INSERT effectuée.
10.43.24 mysql_list_fields
int mysql_list_fields (string database_name, string table_name, int link_identifier )
mysql_list_fields() recherche les informations à propos de la
table spécifiée. Les arguments sont la base de données, et le nom de la table. Un
pointeur de résultat est retourné, et pourra être passé à
mysql_field_flags(),
mysql_field_len(),
mysql_field_name() et
mysql_field_type().
10.43.25 mysql_list_dbs
int mysql_list_dbs (int link_identifier )
mysql_list_dbs() retournera un identifiant de résultat, qui contiendra les noms des bases de données disponsibles sur le serveur MySQL. Utilisez la fonction mysql_tablename() pour lire toutes les bases de données.
10.43.26 mysql_list_tables
int mysql_list_tables (string database, int link_identifier )
mysql_list_tables() prend le nom d'une base de données comme
argument, et retourne un identifiant de résultat, qui contiendra la liste des
tables. La fonction mysql_tablename() est le meilleur moyen
d'extraire les noms des tables depuis l'identifiant de résultat.
10.43.27 mysql_num_fields
int mysql_num_fields (int result)
mysql_num_fields() retourne le nombre de champs d'un résultat.
10.43.28 mysql_num_rows
int mysql_num_rows (int result)
mysql_num_rows() retourne le nombre de ligne d'une résultat.
10.43.29 mysql_pconnect
int mysql_pconnect (string hostname :port :/path/to/socket , string username , string password )
Retourne un lien persistant positif en cas de succès, et sinon FALSE en cas
d'erreur.
10.43.30 mysql_query
int mysql_query (string query, int link_identifier )
mysql_query() envoie une requête SQL à la base de données
actuellement active sur le serveur MysQL. Si link_identifier
n'est pas précisé, la dernière connexion est utilisée. Si aucune connexion n'a
été ouverte, la fonction tentera d'en ouvrir une, avec la fonction
mysql_connect() mais sans aucun paramètre (c'est à dire avec
les valeurs par défaut).
<?php $result = mysql_query ("SELECT * WHERE 1=1") or die ("Invalid query"); ?>
<?php $result = mysql_query ("SELECT my_col FROM my_tbl") or die ("Invalid query"); ?>
10.43.31 mysql_result
int mysql_result (int result, int row, mixed field )
mysql_result() retourne le contenu d'un champs dans un
résultat MySQL. L'argument de champs row peut être un
offset de champs, ou le nom du champs, ou le nom de la table + point + le nom
du champs (table.champs). Si la colonne a été aliasée, utilisez de préférence
l'alias.
10.43.32 mysql_select_db
int mysql_select_db (string database_name, int link_identifier )
Retourne TRUE en cas de succès, FALSE sinon.
10.43.33 mysql_tablename
string mysql_tablename (int result, int i) mysql_tablename() prend le pointeur de résultat obtenu avec mysql_list_tables() ou bien un index entier, et retourne le nom de la table. La fonction mysql_num_rows() peut être utilisée pour déterminer le nombre de tables dans le pointeur de résultat. Exemple mysql_tablename() <?php mysql_connect ("localhost:3306"); $result = mysql_list_tables ("wisconsin"); $i = 0; while ($i < mysql_num_rows ($result)) { $tb_names[$i] = mysql_tablename ($result, $i); echo $tb_names[$i] . "<BR>"; $i++; } ?>
10.44 Réseau
10.44.1 checkdnsrr
int checkdnsrr (string host, string type)
Recherche l'enregistrement DNS de type type correspondant
à l'hôte host.
Retourne TRUE si un record a été trouvé, et FALSE en cas d'erreur ou d'échec.
10.44.2 closelog
int closelog
closelog() ferme le pointeur qui sert à écrire
dans l'historique système. L'utilisation de closelog() est
optionnelle.
10.44.3 debugger_off
int debugger_off
Inactive le debuggeur interne de PHP. Le debuggeur est toujours en cours de
développement.
10.44.4 debugger_on
int debugger_on (string address)
Active le debugger interne de PHP, et le connecte à l'adresse
address. Le debuggeur est toujours en cours de développement.
10.44.5 fsockopen
int fsockopen (string hostname, int port, int errno, string errstr, double timeout)
Créer un flot de connexion à l'Internet (AF_INET) ou à un domaine Unix (AF_UNIX).
Via Internet, cette fonction va ouvrir une socket de connexion TCP avec l'hôte
hostname sur le port port.
Via un domaine Unix, hostname représente le chemin jusqu'à
la socket, et port doit être mis à 0. L' option
timeout sert à donner une durée maximale à cet appel.
$fp = fsockopen("www.php.net", 80, &$errno, &$errstr, 30); if(!$fp) { echo "$errstr ($errno)<br>\n"; } else { fputs($fp,"GET / HTTP/1.0\n\n"); while(!feof($fp)) { echo fgets($fp,128); } fclose($fp); }
Voir aussi pfsockopen() 10.44.6 gethostbyaddr
string gethostbyaddr (string ip_address)
Retourne le nom d'hôte correspondant à l'IP ip_address.
Si une erreur survient, retourne ip_address.
10.44.7 gethostbyname
string gethostbyname (string hostname)
Retourne l'adresse IP correspondant à l'hôte hostname.
10.44.8 gethostbynamel
array gethostbynamel (string hostname)
Retourne la liste d'IP correspondant à l'hôte hostname.
10.44.9 getmxrr
int getmxrr (string hostname, array mxhosts, array weight)
Effectue une recherche DNS pour obtenir les enregistrements MX de
l'hôte hostname. Retourne TRUE si des enregistrements sont
trouvés, et FALSE si une erreur est rencontrée, ou si la recherche échoue.
10.44.10 getprotobyname
int getprotobyname (string name)
getprotobyname() retourne le numéro de protocole associé avec
le nom de protocole name, comme dans `/etc/protocols'.
10.44.11 getprotobynumber
string getprotobynumber (int number)
getprotobynumber() retourne le numéro de protocole associé avec
le nom de protocole name, comme dans `/etc/protocols'.
10.44.12 getservbyname
int getservbyname (string service, string protocol)
getservbyname() retourne le numéro de port associé à
au service service et protocole
protocol, comme dans `/etc/services'.
protocol vaut soit tcp ou
udp.
10.44.13 getservbyport
string getservbyport (int port, string protocol)
getservbyport() le service internet associé au port
port pour le protocole protocol
comme dans `/etc/services'.
protocol vaut soit tcp ou
udp.
10.44.14 ip2long
int ip2long (string ip_address) ip2long() génére une adresse IPv4 à partir de son équivalent numérique. Exemple ip2long() <? $ip = gethostbyname("www.php.net"); $out = "Les URLS suivantes sont équivalentes :<br>\n"; $out .= "http://www.php.net/, http://".$ip."/, and http://".ip2long($ip)."/<br>\n"; echo $out; ?>
10.44.15 long2ip
string long2ip (int proper_address)
long2ip() génére une adresse IP (format aaa.bbb.ccc.ddd)
à partir de sa représentation litérale.
10.44.16 openlog
int openlog (string ident, int option, int facility)
openlog() ouvre la connexion à l'historique système. La chaîne
ident sera ajouté à chaque message. Les valeurs de
option et facility sont données dans
la section suivante. L'utilisation de openlog() est
optionnelle; cette fonction sera automatiquement appelée par
syslog() si nécessaire, et dans ce cas, l'identification
sera mise par défaut à FALSE.
10.44.17 pfsockopen
int pfsockopen (string hostname, int port, int errno, string errstr, int timeout)
Cette fonction se comporte exactement comme fsockopen()
mais la connexion ouverte le reste, même après la fin du script. C'est la
version persistante de fsockopen().
10.44.18 set_socket_blocking
int set_socket_blocking (int socket descriptor, int mode)
Si mode est FALSE, la socket est mise en mode non bloquant,
et si il est TRUE, la socket est mise en mode bloquant. Cela affecte des appels
tels que fgets() qui lisent depuis une socket. En mode non
bloquant, un appel fgets() retournera immediatement toujours
TRUE tandis qu'en mode bloquant, elle va attendre que des données arrivent pour
répondre TRUE.
10.44.19 socket_set_timeout
bool socket_set_timeout (int socket descriptor, int seconds, int microseconds) socket_set_timeout() fixe la durée de vie de la socket socket descriptor, exprimée comme la somme de seconds secondes et microseconds micro-secondes. Exemple socket_set_timeout() <?php $fp = fsockopen("http://www.php.net", 80); if(!$fp) { echo "Unable to open\n"; } else { fputs($fp,"GET / HTTP/1.0\n\n"); $start = time(); socket_set_timeout($fp, 2); $res = fread($fp, 2000); var_dump(socket_get_status($fp)); fclose($fp); print $res; } ?>
10.44.20 syslog
int syslog (int priority, string message)
syslog() génére un message qui sera inscrit dans l'historique
par le système. priority est une combinaison des valeurs
d'accès et de niveau, qui seront décrites dans la prochaîne section. Les derniers
arguments sont le message à envoyer. Attention : les caractères
%m seront remplacés par l'erreur (sous forme de chaîne),
présente dans 10.45 NIS
NIS (feu Yellow Pages / Pages jaunes) permet la gestion par le réseau de
fichiers d'administration importants (tel un fichier de mot de passe). Pour plus
d'informations, reportez vous au manuel NIS, ou à
Introduction to YP/NISIntroduction to YP/NIS
(en anglais). Il existe un livre en anglais
Managing NFS and NIS" par Hal Stern.
10.45.1 yp_get_default_domain
int yp_get_default_domain (void )
yp_get_default_domain() retourne le nom de domaine NIS par
défaut. Ce nom de domaine peut être utilisé pour les futurs appels NIS.
<?php $domain = yp_get_default_domain(); echo "Le domaine par défaut est : " . $domain; ?>
10.45.2 yp_order
int yp_order (string domain, string map)
yp_order() retourne le numéro d'ordre d'une carte ou FALSE.
<?php $number = yp_order($domain,$mapname); echo "Le numéro d'ordre de cette carte est : " . $order; ?>
10.45.3 yp_master
string yp_master (string domain, string map)
yp_master() retourne le nom de la machine maître
d'une carte.
<?php $number = yp_master($domain, $mapname); echo "Master for this map is: " . $master; ?>
10.45.4 yp_match
string yp_match (string domain, string map, string key)
yp_match() retourne la valeur associée à la clé passée en
argument, pour la carte spécifiée, ou FALSE. La clé doit exister et être exacte.
<?php $entry = yp_match($domain, "passwd.byname", "joe"); echo "La valeur trouvée est: " . $entry; ?>
10.45.5 yp_first
string[] yp_first (string domain, string map)
yp_first() retourne le premier couple (clé ; valeur) d'une
carte donnée, ou FALSE.
<?php $entry = yp_first($domain, "passwd.byname"); $key = key($entry); echo "La première entrée de cette carte est " . $key . " et sa valeur est " . $entry[$key]; ?>
10.45.6 yp_next
string[] yp_next (string domain, string map, string key)
yp_next() retourne le couple (clé ; valeur) suivant la clé
donnée d'une carte donnée ou FALSE.
<?php $entry = yp_next($domain, "passwd.byname", "joe"); if(!$entry) { echo yp_errno() . ": " . yp_err_string(); } $key = key($entry); echo "L'entree suivante après joe a la cle " . $key . " et sa valeur " . $entry[$key]; ?>
10.46 Oracle 8 functions
Ces fonctions vous permettront d'accéder aux serveurs Oracle8 et Oracle7. Elles
utilisent l'interface Oracle8 Call-Interface (OCI8). Vous aurez donc besoin des
librairies clientes Oracle8 pour pouvoir les utiliser.
10.46.1 OCIDefineByName
int ocidefinebyname (int stmt, string Column-Name, mixed &variable, int type)
ocidefinebyname() copie les valeurs issues de SQL-Columns
dans des variables PHP. Méfiez-vous des colonnes Oracle qui sont toutes en
majuscule, tandis que dans les SELECT, vous pouvez aussi les écrire en minuscule.
ocidefinebyname() s'attend à ce que Column-Name
soit en majuscule.
Si vous définissez une variable qui n'existe pas dans la commande SELECT, vous ne
serez pas prévenu par une erreur.
<?php /* Exemple OCIDefineByPos par thies@digicol.de (980219) */ $conn = OCILogon("scott","tiger"); $stmt = OCIParse($conn,"select empno, ename from emp"); /* La définition DOIT être faîte AVANT ociexecute! */ OCIDefineByName($stmt,"EMPNO",&$empno); OCIDefineByName($stmt,"ENAME",&$ename); OCIExecute($stmt); while (OCIFetch($stmt)) { echo "empno:".$empno."\n"; echo "ename:".$ename."\n"; } OCIFreeStatement($stmt); OCILogoff($conn); ?> 10.46.2 OCIBindByName
int ocibindbyname (int stmt, string ph_name, mixed &variable, intlength, int type)
ocibindbyname() relie la variable PHP
variable à l'emplacement Oracle
ph_name. Son utilisation (comme entrée ou comme sortie)
sera définie à l'exécution, et l'espace nécessaire sera alloué. Le paramètre de
longueur length fixe la taille maximum pour la liaison.
Si vous affectez une longueur de -1, ocibindbyname() utilisera
la longueur de variable comme maximum.
<?php /* Exemple OCIBindByPos par thies@digicol.de (980221) insère 3 lignes dans emp, et utilise ROWID pour mettre à jour les lignes, juste après l'insertion. */ $conn = OCILogon("scott","tiger"); $stmt = OCIParse($conn,"insert into emp (empno, ename) ". "values (:empno,:ename) ". "returning ROWID into :rid"); $data = array(1111 => "Larry", 2222 => "Bill", 3333 => "Jim"); $rowid = OCINewDescriptor($conn,OCI_D_ROWID); OCIBindByName($stmt,":empno",&$empno,32); OCIBindByName($stmt,":ename",&$ename,32); OCIBindByName($stmt,":rid",&$rowid,-1,OCI_B_ROWID); $update = OCIParse($conn,"update emp set sal = :sal where ROWID = :rid"); OCIBindByName($update,":rid",&$rowid,-1,OCI_B_ROWID); OCIBindByName($update,":sal",&$sal,32); $sal = 10000; while (list($empno,$ename) = each($data)) { OCIExecute($stmt); OCIExecute($update); } $rowid->free(); OCIFreeStatement($update); OCIFreeStatement($stmt); $stmt = OCIParse($conn,"select * from emp where empno in (1111,2222,3333)"); OCIExecute($stmt); while (OCIFetchInto($stmt,&$arr,OCI_ASSOC)) { var_dump($arr); } OCIFreeStatement($stmt); /* delete our "junk" from the emp table.... */ $stmt = OCIParse($conn,"delete from emp where empno in (1111,2222,3333)"); OCIExecute($stmt); OCIFreeStatement($stmt); OCILogoff($conn); ?> 10.46.3 OCILogon
int ocilogon (string username, string password, string db)
ocilogon() retourne un identifiant de connexion, nécessaire à
la plus part des fonctions OCI. Si l'option ORACLE_SID n'est pas précisée, PHP
utilisera la variable d'environnement ORACLE_SID pour déterminer le serveur de
connexion.
<?php print "<HTML><PRE>"; $db = ""; $c1 = ocilogon("scott","tiger",$db); $c2 = ocilogon("scott","tiger",$db); function create_table($conn) { $stmt = ociparse($conn,"create table scott.hallo (test varchar2(64))"); ociexecute($stmt); echo $conn." created table\n\n"; } function drop_table($conn) { $stmt = ociparse($conn,"drop table scott.hallo"); ociexecute($stmt); echo $conn." dropped table\n\n"; } function insert_data($conn) { $stmt = ociparse($conn,"insert into scott.hallo values('$conn' || ' ' || to_char(sysdate,'DD-MON-YY HH24:MI:SS'))"); ociexecute($stmt,OCI_DEFAULT); echo $conn." inserted hallo\n\n"; } function delete_data($conn) { $stmt = ociparse($conn,"delete from scott.hallo"); ociexecute($stmt,OCI_DEFAULT); echo $conn." deleted hallo\n\n"; } function commit($conn) { ocicommit($conn); echo $conn." commited\n\n"; } function rollback($conn) { ocirollback($conn); echo $conn." rollback\n\n"; } function select_data($conn) { $stmt = ociparse($conn,"select * from scott.hallo"); ociexecute($stmt,OCI_DEFAULT); echo $conn."----selecting\n\n"; while (ocifetch($stmt)) echo $conn." <".ociresult($stmt,"TEST").">\n\n"; echo $conn."----done\n\n"; } create_table($c1); insert_data($c1); // Insertion d'une ligne avec c1 insert_data($c2); // Insertion d'une ligne avec c2 select_data($c1); // Les résultats des deux insertions sont retournés select_data($c2); rollback($c1); // Annulation avec c1 select_data($c1); // Les résultats des deux insertions sont annulés select_data($c2); insert_data($c2); // Insertion d'une ligne avec c2 commit($c2); // Validation avec using c2 select_data($c1); // Le résultat de c2 est retourné delete_data($c1); // Effacement de toutes les lignes avec c1 select_data($c1); // Aucune ligne n'est retournée select_data($c2); // Aucune ligne n'est retournée commit($c1); // Validation avec c1 select_data($c1); // Aucune ligne n'est retournée select_data($c2); // Aucune ligne n'est retournée drop_table($c1); print "</PRE></HTML>"; ?>
10.46.4 OCIPLogon
int ociplogon (string username, string password, string db)
ociplogon() crée une connexion persistante à un serveur
Oracle 8 et s'authentifie. Si l'option ORACLE_SID n'est pas spécifiée, PHP
utilisera la variable d'environnement ORACLE_SID pour déterminer le serveur de
connexion.
10.46.5 OCINLogon
int ocinlogon (string username, string password, string db)
ocinlogon() crée une nouvelle connexion à un serveur Oracle et
s'authentifie. Si l'option ORACLE_SID n'est pas spécifié, PHP utilisera la
variable d'environnement ORACLE_SID pour déterminer le serveur de connexion.
<?php print "<HTML><PRE>"; $db = ""; $c1 = ocilogon("scott","tiger",$db); $c2 = ocinlogon("scott","tiger",$db); function create_table($conn) { $stmt = ociparse($conn,"create table scott.hallo (test varchar2(64))"); ociexecute($stmt); echo $conn." created table\n\n"; } function drop_table($conn) { $stmt = ociparse($conn,"drop table scott.hallo"); ociexecute($stmt); echo $conn." dropped table\n\n"; } function insert_data($conn) { $stmt = ociparse($conn,"insert into scott.hallo values('$conn' || ' ' || to_char(sysdate,'DD-MON-YY HH24:MI:SS'))"); ociexecute($stmt,OCI_DEFAULT); echo $conn." inserted hallo\n\n"; } function delete_data($conn) { $stmt = ociparse($conn,"delete from scott.hallo"); ociexecute($stmt,OCI_DEFAULT); echo $conn." deleted hallo\n\n"; } function commit($conn) { ocicommit($conn); echo $conn." commited\n\n"; } function rollback($conn) { ocirollback($conn); echo $conn." rollback\n\n"; } function select_data($conn) { $stmt = ociparse($conn,"select * from scott.hallo"); ociexecute($stmt,OCI_DEFAULT); echo $conn."----selecting\n\n"; while (ocifetch($stmt)) echo $conn." <".ociresult($stmt,"TEST").">\n\n"; echo $conn."----done\n\n"; } create_table($c1); insert_data($c1); select_data($c1); select_data($c2); rollback($c1); select_data($c1); select_data($c2); insert_data($c2); commit($c2); select_data($c1); delete_data($c1); select_data($c1); select_data($c2); commit($c1); select_data($c1); select_data($c2); drop_table($c1); print "</PRE></HTML>"; ?>
10.46.6 OCILogOff
int ocilogoff (int connection)
ocilogoff() ferme la connexion Oracle.
10.46.7 OCIExecute
int ociexecute (int statement, int mode)
ociexecute() éxécute une commande déjà préparée
(voir ociparse()). L'option mode vous
permet de spécifier le mode d'exécution (par défaut, il est à OCI_COMMIT_ON_SUCCESS).
Si vous ne voulez pas que la commande soit automatiquement validée, utilisez le
mode OCI_DEFAULT.
10.46.8 OCICommit
int ocicommit (int connection)
ocicommit() valide toutes les transactions en cours sur la
connexion Oracle connection.
10.46.9 OCIRollback
int ocirollback (int connection)
ocirollback() annule les transactions en cours sur la
connexion Oracle connection.
10.46.10 OCINewDescriptor
string ocinewdescriptor (int connection, int type)
ocinewdescriptor() alloue l'espace nécessaire pour stocker un
descripteur, ou un pointeur de LOB. Les valeurs acceptées pour type sont
OCI_D_FILE, OCI_D_LOB et OCI_D_ROWID.
<?php /* Ce script est fait pour être appelé dans un formulaire HTML * Il attends les variables $user, $password, $table, $where, et $commitsize * Le scrip efface alors les lignes selectionnées avec ROWID et valide * l'effacement après chaque groupe de $commitsize lignes. * (Utilisez avec prudences, car il n'y a pas d'annulation possible). */ $conn = OCILogon($user, $password); $stmt = OCIParse($conn,"select rowid from $table $where"); $rowid = OCINewDescriptor($conn,OCI_D_ROWID); OCIDefineByName($stmt,"ROWID",&$rowid); OCIExecute($stmt); while ( OCIFetch($stmt) ) { $nrows = OCIRowCount($stmt); $delete = OCIParse($conn,"delete from $table where ROWID = :rid"); OCIBindByName($delete,":rid",&$rowid,-1,OCI_B_ROWID); OCIExecute($delete); print "$nrows\n"; if ( ($nrows % $commitsize) == 0 ) { OCICommit($conn); } } $nrows = OCIRowCount($stmt); print "$nrows effacées...\n"; OCIFreeStatement($stmt); OCILogoff($conn); ?><?php /* Ce script est fait pour être appelé depuis un formulaire HTML. * Il attend les variables $user, $password, $table, $where, et $commitsize, * données par le formulaire. Le script efface * les lignes selectionnées avec ROWID est valide les transactions * à chaque jeu de $commitsize lignes. (Attention : il n'y plus d'annulation */ if(!isset($lob_upload) || $lob_upload == 'none'){ ?> <form action="upload.php3" method="post" enctype="multipart/form-data"> Upload file: <input type="file" name="lob_upload"><br> <input type="submit" value="Upload"> - <input type="reset"> </form> <?php } else { // $lob_upload contains the temporary filename of the uploaded file $conn = OCILogon($user, $password); $lob = OCINewDescriptor($conn, OCI_D_LOB); $stmt = OCIParse($conn,"insert into $table (id, the_blob) values(my_seq.NEXTVAL, EMPTY_BLOB()) returning the_blob into :the_blob"); OCIBindByName($stmt, ':the_blob', &$lob, -1, OCI_B_BLOB); OCIExecute($stmt); if($lob->savefile($lob_upload)){ OCICommit($conn); echo "Blob sauvé!\n"; }else{ echo "Impossible de sauver le Blob\n"; } OCIFreeDescriptor($lob); OCIFreeStatement($stmt); OCILogoff($conn); } ?> 10.46.11 OCIRowCount
int ocirowcount (int statement)
ocirowcount() retourne le nombre de lignes affectées par une
commande de modification. Cette fonction ne vous indiquera pas le nombre de lignes
retournées par un SELECT : il faut que les lignes aient été modifiées.
<?php print "<HTML><PRE>"; $conn = OCILogon("scott","tiger"); $stmt = OCIParse($conn,"create table emp2 as select * from emp"); OCIExecute($stmt); print OCIRowCount($stmt) . " rows inserted.<BR>"; OCIFreeStatement($stmt); $stmt = OCIParse($conn,"delete from emp2"); OCIExecute($stmt); print OCIRowCount($stmt) . " rows deleted.<BR>"; OCICommit($conn); OCIFreeStatement($stmt); $stmt = OCIParse($conn,"drop table emp2"); OCIExecute($stmt); OCIFreeStatement($stmt); OCILogOff($conn); print "</PRE></HTML>"; ?>
10.46.12 OCINumCols
int ocinumcols (int stmt)
ocinumcols() retourne le nombre de colonnes dans un résultat
<?php print "<HTML><PRE>\n"; $conn = OCILogon("scott", "tiger"); $stmt = OCIParse($conn,"select * from emp"); OCIExecute($stmt); while ( OCIFetch($stmt) ) { print "\n"; $ncols = OCINumCols($stmt); for ( $i = 1; $i <= $ncols; $i++ ) { $column_name = OCIColumnName($stmt,$i); $column_value = OCIResult($stmt,$i); print $column_name . ': ' . $column_value . "\n"; } print "\n"; } OCIFreeStatement($stmt); OCILogoff($conn); print "</PRE>"; print "</HTML>\n"; ?> 10.46.13 OCIResult
mixed ociresult (int statement, mixed column)
ociresult() retourne les données de la colonne
column dans la ligne courante
(voir ocifetch()).
ocifetch() retournera tout les types, sauf les types abstraits
(ROWIDs, LOBs et FILEs).
10.46.14 OCIFetch
int ocifetch (int statement)
ocifetch() place la prochaîne ligne (d'une commande SELECT) dans
le pointeur interne de résultat.
10.46.15 OCIFetchInto
int ocifetchinto (int stmt, array &result, int mode)
ocifetchinto() retourne la ligne suivante (pour une commande
SELECT) dans le tableau result.
ocifetchinto() crasera le contenu de
result.
Par défaut, result sera un tableau à index numérique,
commencant à 1, et qui contiendra toute les colonnes qui ne sont pas NULL.
10.46.16 OCIFetchStatement
int ocifetchstatement (int stmt, array &variable)
ocifetchstatement() retourne toutes les lignes d'un résultat
dans le tableau variable. ocifetchstatement() retourne le nombre
de lignes retournées.
<?php /* exemple OCIFetchStatement par mbritton@verinet.com (990624) */ $conn = OCILogon("scott","tiger"); $stmt = OCIParse($conn,"select * from emp"); OCIExecute($stmt); $nrows = OCIFetchStatement($stmt,$results); if ( $nrows > 0 ) { print "<TABLE BORDER=\"1\">\n"; print "<TR>\n"; while ( list( $key, $val ) = each( $results ) ) { print "<TH>$key</TH>\n"; } print "</TR>\n"; for ( $i = 0; $i < $nrows; $i++ ) { reset($results); print "<TR>\n"; while ( $column = each($results) ) { $data = $column['value']; print "<TD>$data[$i]</TD>\n"; } print "</TR>\n"; } print "</TABLE>\n"; } else { echo "Rien n'a été trouvé<BR>\n"; } print "$nrows Records Selected<BR>\n"; OCIFreeStatement($stmt); OCILogoff($conn); ?> 10.46.17 OCIColumnIsNULL
int ocicolumnisnull (int stmt, mixed column)
ocicolumnisnull() retourne TRUE si la colonne
col du résultat stmt est NULL.
Vous pouvez utiliser le numéro de colonne (l'indexation des colonnes commence à 1)
ou le nom de la colonne, pour le paramètre col.
10.46.18 OCIColumnSize
int ocicolumnsize (int stmt, mixed column)
ocicolumnsize() retourne la taille de la colonne. Vous pouvez
utiliser l'index de colonne (l'indexation commence à 1) ou le nom de la colonne
dans le paramètre col.
<?php print "<HTML><PRE>\n"; $conn = OCILogon("scott", "tiger"); $stmt = OCIParse($conn,"select * from emp"); OCIExecute($stmt); print "<TABLE BORDER=\"1\">"; print "<TR>"; print "<TH>Name</TH>"; print "<TH>Type</TH>"; print "<TH>Length</TH>"; print "</TR>"; $ncols = OCINumCols($stmt); for ( $i = 1; $i <= $ncols; $i++ ) { $column_name = OCIColumnName($stmt,$i); $column_type = OCIColumnType($stmt,$i); $column_size = OCIColumnSize($stmt,$i); print "<TR>"; print "<TD>$column_name</TD>"; print "<TD>$column_type</TD>"; print "<TD>$column_size</TD>"; print "</TR>"; } print "</TABLE>"; OCIFreeStatement($stmt); OCILogoff($conn); print "</PRE>"; print "</HTML>\n"; ?>
10.46.19 OCIServerVersion
string ociserverversion (int conn) ociserverversion() retourne une chaîne contenant les informations de version du serveur OCIServerVersion <?php $conn = OCILogon("scott","tiger"); print "Version du serveur : " . OCIServerVersion($conn); OCILogOff($conn); ?>
10.46.20 OCIStatementType
string ocistatementtype (int stmt) ocistatementtype() retourne une des valeurs suivantes :
<?php print "<HTML><PRE>"; $conn = OCILogon("scott","tiger"); $sql = "delete from emp where deptno = 10"; $stmt = OCIParse($conn,$sql); if ( OCIStatementType($stmt) == "DELETE" ) { die "Vous n'etes pas autorisé à effacer dans cette table.<BR>"; } OCILogoff($conn); print "</PRE></HTML>"; ?>
10.46.21 OCINewCursor
int ocinewcursor (int conn)
ocinewcursor() alloue un nouveau pointeur de commande, pour la
connexion conn.
<?php // suppose your stored procedure info.output returns a ref cursor in :data $conn = OCILogon("scott","tiger"); $curs = OCINewCursor($conn); $stmt = OCIParse($conn,"begin info.output(:data); end;"); ocibindbyname($stmt,"data",&$curs,-1,OCI_B_CURSOR); ociexecute($stmt); ociexecute($curs); while (OCIFetchInto($curs,&$data)) { var_dump($data); } OCIFreeCursor($stmt); OCIFreeStatement($curs); OCILogoff($conn); ?>
<?php print "<HTML><BODY>"; $conn = OCILogon("scott","tiger"); $count_cursor = "CURSOR(select count(empno) num_emps from emp " . "where emp.deptno = dept.deptno) as EMPCNT from dept"; $stmt = OCIParse($conn,"select deptno,dname,$count_cursor"); ociexecute($stmt); print "<TABLE BORDER=\"1\">"; print "<TR>"; print "<TH>DEPT NAME</TH>"; print "<TH>DEPT #</TH>"; print "<TH># EMPLOYEES</TH>"; print "</TR>"; while (OCIFetchInto($stmt,&$data,OCI_ASSOC)) { print "<TR>"; $dname = $data["DNAME"]; $deptno = $data["DEPTNO"]; print "<TD>$dname</TD>"; print "<TD>$deptno</TD>"; ociexecute($data[ "EMPCNT" ]); while (OCIFetchInto($data[ "EMPCNT" ],&$subdata,OCI_ASSOC)) { $num_emps = $subdata["NUM_EMPS"]; print "<TD>$num_emps</TD>"; } print "</TR>"; } print "</TABLE>"; print "</BODY></HTML>"; OCIFreeStatement($stmt); OCILogoff($conn); ?>
10.46.22 OCIFreeStatement
int ocifreestatement (int stmt)
ocifreestatement() retourne TRUE en cas de succès, et FALSE en
cas d'échec.
10.46.23 OCIFreeCursor
int ocifreecursor (int stmt)
ocifreecursor() retourne TRUE en cas de succès, et FALSE
en cas d'échec.
10.46.24 OCIColumnName
string ocicolumnname (int stmt, int col)
ocicolumnname() retourne le nom de la colonne correspondant au
numéro de colonne passé en paramètre (l'indexation des colonnes commence à 1).
<?php print "<HTML><PRE>\n"; $conn = OCILogon("scott", "tiger"); $stmt = OCIParse($conn,"select * from emp"); OCIExecute($stmt); print "<TABLE BORDER=\"1\">"; print "<TR>"; print "<TH>Name</TH>"; print "<TH>Type</TH>"; print "<TH>Length</TH>"; print "</TR>"; $ncols = OCINumCols($stmt); for ( $i = 1; $i <= $ncols; $i++ ) { $column_name = OCIColumnName($stmt,$i); $column_type = OCIColumnType($stmt,$i); $column_size = OCIColumnSize($stmt,$i); print "<TR>"; print "<TD>$column_name</TD>"; print "<TD>$column_type</TD>"; print "<TD>$column_size</TD>"; print "</TR>"; } OCIFreeStatement($stmt); OCILogoff($conn); print "</PRE>"; print "</HTML>\n"; ?>
10.46.25 OCIColumnType
mixed ocicolumnname (int stmt, int col)
ocicolumntype() retourne le type de données de la colonne
correspondant au numéro de colonne (les colonnes sont indexées à partir de 1).
<?php print "<HTML><PRE>\n"; $conn = OCILogon("scott", "tiger"); $stmt = OCIParse($conn,"select * from emp"); OCIExecute($stmt); print "<TABLE BORDER=\"1\">"; print "<TR>"; print "<TH>Name</TH>"; print "<TH>Type</TH>"; print "<TH>Length</TH>"; print "</TR>"; $ncols = OCINumCols($stmt); for ( $i = 1; $i <= $ncols; $i++ ) { $column_name = OCIColumnName($stmt,$i); $column_type = OCIColumnType($stmt,$i); $column_size = OCIColumnSize($stmt,$i); print "<TR>"; print "<TD>$column_name</TD>"; print "<TD>$column_type</TD>"; print "<TD>$column_size</TD>"; print "</TR>"; } OCIFreeStatement($stmt); OCILogoff($conn); print "</PRE>"; print "</HTML>\n"; ?>
10.46.26 OCIParse
int ociparse (int conn, strint query)
ociparse() analyse la requête query
sur la connexion conn, et retourne TRUE si la requête
query est valide, et FALSE, si ce n'est pas le cas.
query peut être n'importe quelle requête SQL.
10.46.27 OCIError
int ocierror (int stmt)conn|
ocierror() retourne la dernière erreur trouvée. Si l'option
stmt|conn n'est pas fournie, la dernière erreur rencontrée
est retournée. Si aucune erreur n'est trouvée, ocierror()
retourne FALSE.
10.46.28 OCIInternalDebug
void ociinternaldebug (int onoff)
ociinternaldebug() active l'affichage des informations de
debuggage. Pour les afficher, mettez onoff à 0, ou sinon à 1 pour les cacher.
10.47 Oracle
10.47.1 Ora_Bind
int ora_bind (int cursor, string PHP variable name, string SQL parameter name, int length, int type)
ora_bind() retourne TRUE si la liaison a pu se faire, et
sinon FALSE. Les erreurs sont accessibles avec les fonctions
ora_error() et ora_errorcode().
<?php ora_parse($curs, "declare tmp INTEGER; begin tmp := :in; :out := tmp; :x := 7.77; end;"); ora_bind($curs, "result", ":x", $len, 2); ora_bind($curs, "input", ":in", 5, 1); ora_bind($curs, "output", ":out", 5, 2); $input = 765; ora_exec($curs); echo "Résultat: $result<BR>Sortie: $output<BR>Entrée: $input"; ?>
10.47.2 Ora_Close
int ora_close (int cursor)
Retourne TRUE si la fermeture a bien eu lieu, et FALSE sinon.
Les erreurs sont accessibles avec les fonctions ora_error() et
ora_errorcode().
10.47.3 Ora_ColumnName
string ora_columnname (int cursor, int column)
ora_columnname() retourne le nom du champs
column du pointeur cursor.
Le nom retourné sera en majuscule.
10.47.4 Ora_ColumnSize
int ora_columnsize (int cursor, int column)
Retourne la taille de la colonne column du
résultat cursor.
10.47.5 Ora_ColumnType
string ora_columntype (int cursor, int column) ora_columntype() retourne le type de la colonne column du résultat cursor. Le type retourné prendra une des valeurs suivantes :
10.47.6 Ora_Commit
int ora_commit (int conn)
Retourne TRUE si la validation a bien eu lieu, et FALSE sinon. Les erreurs sont
accessibles avec les fonctions ora_error() et
ora_errorcode().
10.47.7 Ora_CommitOff
int ora_commitoff (int conn)
ora_commitoff() retourne TRUE si la désactivation a bien
eu lieu, et FALSE sinon. Les erreurs sont accessibles avec les fonctions
ora_error() et ora_errorcode().
10.47.8 Ora_CommitOn
int ora_commiton (int conn)
ora_commiton() active la validation automatique après chaque
ora_exec().
10.47.9 Ora_Do
int ora_do (int conn, string query)
Cette fonction est une combinaison rapide des fonctions
ora_parse(), ora_exec()
et ora_fetch().
Elle analyse et exécute une requête, puis récupère la première ligne de
résultat.
10.47.10 Ora_Error
string ora_error (int cursor_or_connection)
Retourne un messages d'erreur de la forme
XXX-NNNNN avec
XXX qui est l'origine de l'erreur, et
NNNNN qui identifie le message d'erreur.
Note :
Le support des connexions a été ajouté dans PHP 3.0.4.
10.47.11 Ora_ErrorCode
int ora_errorcode (int cursor_or_connection)
ora_errorcode() retourne le code d'erreur numérique de la
dernière commande exécuté sur la connexion ou le pointeur fourni en paramètre.
Note :
Les identifiants de connexion ne sont acceptés qu'à partir de la version
3.0.4.
10.47.12 Ora_Exec
int ora_exec (int cursor)
ora_exec() retourne TRUE en cas de succès, et FALSE en cas
d'erreur. L'erreur générée sera alors accessible avec les fonctions
ora_error() et ora_errorcode().
10.47.13 Ora_Fetch
int ora_fetch (int cursor)
ora_fetch() retourne TRUE (une ligne a été lue) ou FALSE
(plus de lignes à lire ou erreur). Si une erreur survient, sa valeur sera
disponible dans les fonctions ora_error() et
ora_errorcode().
10.47.14 Ora_Fetch_Into
int ora_fetch_into (int cursor, array result, int flags ) Cette fonction permet de lire une ligne de résultat dans un tableau. Lecture d'une ligne oracle dans un tableau <?php array($results); ora_fetch_into($cursor, &$results); echo $results[0]; echo $results[1]; ?>
Notez que vous devez passser le tableau par référence.
10.47.15 Ora_GetColumn
mixed ora_getcolumn (int cursor, mixed column)
ora_getcolumn() retourne la valeur de la colonne. Si une erreur
survient, FALSE est retourné et ora_errorcode() aura une valeur
non nulle. Notez, qu'un test à FALSE, avec cette fonction peut être TRUE, même sans
erreur : en effet, la fonction peut retourner des valeurs telles que (résultat NULL,
chaînes vides, nombre 0, la chaîne "0").
10.47.16 Ora_Logoff
int ora_logoff (int connection)
ora_logoff() retourne TRUE si la fermeture a bien eu lieu, et
FALSE sinon. Les erreurs sont accessibles avec les fonctions
ora_error() et ora_errorcode().
10.47.17 Ora_Logon
int ora_logon (string user, string password)
ora_logon() établit une connexion entre PHP et un serveur
Oracle avec les noms d'utilisateur user et le mot de passe password.
$conn = Ora_Logon("user@TNSNAME", "pass");
10.47.18 Ora_pLogon
int ora_plogon (string user, string password)
Etablit une connexion persistante entre PHP et un serveur Oracle, en utilisant
le nom de compte user et le mot de passe
password.
10.47.19 Ora_Numcols
int ora_numcols (int cursor_ind)
ora_numcols() Retourne le nombre de colonnes du
résultat cursor_ind. Cette fonction n'a de
sens qu'utilisée après une séquence analyse/exécution/lecture.
10.47.20 Ora_Numrows
int ora_numrows (int cursor_ind)
ora_numrows() retourne le nombre de lignes dans le
résultat cursor_ind.
10.47.21 Ora_Open
int ora_open (int connection)
ora_open() ouvre un pointeur Oracle sur la connexion.
10.47.22 Ora_Parse
int ora_parse (int cursor_ind, string sql_statement, int defer)
ora_parse() analyse une requête SQL ou un bloc PL/SQL et
l'associe avec le pointeur cursor_ind. Retourne 0 en cas de succès, et -1 en cas
d'erreur.
10.47.23 Ora_Rollback
int ora_rollback (int connection)
ora_rollback() annule une transaction Oracle. (Voir
ora_commit() pour la définition d'une transaction).
10.48 Entrées/sorties
Les fonctions d'entrée/sorties vous permettent de contrôler quand les données
sont envoyées par le script. Cela peut être utile dans certaines situations,
notamment si vous devez envoyer des entêtes au navigateur après avoir envoyé
des données. Ces fonctions n'affectent pas les entêtes envoyés par la fonction
header() ou les cookies envoyés par setcookie().
Seules les fonctions telles que echo() et les données entre
blocs PHP sont affectés.
<?php ob_start(); echo "Bonjour\n"; setcookie ("nom_du_cookie", "valeur_du_cookie"); ob_end_flush(); ?>
10.48.1 flush
void flush
Vide les buffers de sortie de PHP et tous ceux que PHP utilisait
(CGI, un serveur web, etc.).
10.48.2 ob_start
void ob_start
Cette fonction démarre la bufferisation de sortie. Tant qu'elle est enclenchée,
aucune données n'est envoyée au client web, mais temporairement mis en buffer.
10.48.3 ob_get_contents
string ob_get_contents
Cette fonction retourne le contenu du buffer de sortie si la bufferisation
est active, ou FALSE sinon.
10.48.4 ob_get_length
string ob_get_length
Cette fonction retourne la longueur du contenu du buffer de sortie si la
bufferisation est activée, et FALSE sinon.
10.48.5 ob_end_flush
void ob_end_flush
Cette fonction envoie le contenu du buffer de sortie (si il existe)
et éteind la bufferisation de sortie. Si vous voulez continuer à
manipuler la valeur du buffer, vous pouvez appeler
ob_get_contents() avant ob_end_flush()
car le contenu du buffer est détruit après un appel à
ob_get_contents().
10.48.6 ob_end_clean
void ob_end_clean
Cette fonction détruit les données du buffer de sortie, et éteind la bufferisation.
10.48.7 ob_implicit_flush
void ob_implicit_flush (int flag )
ob_implicit_flush() active/désactive l'envoi implicite
(si flag est fourni. Par défaut, il est activé).
L'envoi implicite signifie que toute fonction qui envoie des données
au client web veront leurs données envoyées immédiatement (la fonction
flush() est appelée automatiquement).
10.49 Ovrimos SQL
Ovrimos SQL Server est une base de données relationnelle client/serveur
et transactionelle, combinée avec des fonctionnalités web, et des
transactions rapides.
<?php $conn = ovrimos_connect ("server.domain.com", "8001", "admin", "password"); if ($conn != 0) { echo ("Connection établie!"); $res = ovrimos_exec ($conn, "select table_id, table_name from sys.tables"); if ($res != 0) { echo "Requête effectuée!"; ovrimos_result_all ($res); ovrimos_free_result ($res); } ovrimos_close($conn); } ?>
Cet exemple effectue une connexion réussie.
10.49.1 ovrimos_connect
int ovrimos_connect (string host, string db, string user, string password)
ovrimos_connect() sert à se connecter à un serveur
Ovrimos.
<?php $conn = ovrimos_connect ("server.domain.com", "8001", "admin", "password"); if ($conn != 0) { echo "Connection établie!"; $res=ovrimos_exec ($conn, "select table_id, table_name from sys.tables"); if ($res != 0) { echo "Requête effectuée!"; ovrimos_result_all ($res); ovrimos_free_result ($res); } ovrimos_close ($conn); } ?>
L'exemple ci dessus montre comment se connecter à une base de donnée
et afficher le contenu d'une table.
10.49.2 ovrimos_close
void ovrimos_close (int connection)
ovrimos_close() sert à ferme une connexion
à un serveur Ovrimos.
10.49.3 ovrimos_close_all
void ovrimos_close_all (void)
ovrimos_close_all() sert à ferme toutes les connexions.
10.49.4 ovrimos_longreadlen
int ovrimos_longreadlen (int result_id, int length)
ovrimos_longreadlen() sert à lire la taille des
données qui sera lues lors de l'accès une colonne de grande taille.
10.49.5 ovrimos_prepare
int ovrimos_prepare (int connection_id, string query)
ovrimos_prepare() sert à préparer une requête SQL.
<?php $conn=ovrimos_connect ("db_host", "8001", "admin", "password"); if ($conn!=0) { echo "Connection établie!"; $res=ovrimos_prepare ($conn, "select table_id, table_name from sys.tables where table_id=1"); if ($res != 0) { echo "Préparation faite!"; if (ovrimos_execute ($res)) { echo "Exécution réussie!\n"; ovrimos_result_all ($res); } else { echo "Exécution manquée!"; } ovrimos_free_result ($res); } else { echo "Préparation manquée!\n"; } ovrimos_close ($conn); } ?>
Cet exemple montre comment se connecter à un serveur Ovrimos SQL Server,
comment préparer une requête SQL et l'exécuter.
10.49.6 ovrimos_execute
int ovrimos_execute (int result_id, array parameters_array )
ovrimos_execute() sert à exécuter une requête SQL.
10.49.7 ovrimos_cursor
int ovrimos_cursor (int result_id)
ovrimos_cursor() sert à lire le nom du curseur
10.49.8 ovrimos_exec
int ovrimos_exec (int connection_id, string query)
ovrimos_exec() sert à exécuter une requête SQL.
10.49.9 ovrimos_fetch_into
int ovrimos_fetch_into (int result_id, array result_array, string how , int rownumber )
ovrimos_fetch_into() lit une ligne dans un résultat SQL.
<?php $conn=ovrimos_connect ("neptune", "8001", "admin", "password"); if ($conn!=0) { echo "Connection établie!"; $res=ovrimos_exec ($conn,"select table_id, table_name from sys.tables"); if ($res != 0) { echo "Requête effectuée!"; if (ovrimos_fetch_into ($res, &$row)) { list ($table_id, $table_name) = $row; echo "table_id=".$table_id.", table_name=".$table_name."\n"; if (ovrimos_fetch_into ($res, &$row)) { list ($table_id, $table_name) = $row; echo "table_id=".$table_id.", table_name=".$table_name."\n"; } else { echo "Next: erreur\n"; } } else { echo "First: erreur\n"; } ovrimos_free_result ($res); } ovrimos_close ($conn); } ?>
Cet exemple lis une ligne.
10.49.10 ovrimos_fetch_row
int ovrimos_fetch_row (int result_id, int how , int row_number )
ovrimos_fetch_row() lit une ligne dans un résultat SQL.
<?php $conn = ovrimos_connect ("remote.host", "8001", "admin", "password"); if ($conn != 0) { echo "Connection établie!"; $res=ovrimos_exec ($conn, "select table_id, table_name from sys.tables"); if ($res != 0) { echo "Requête effectuée!"; if (ovrimos_fetch_row ($res, "First")) { $table_id = ovrimos_result ($res, 1); $table_name = ovrimos_result ($res, 2); echo "table_id=".$table_id.", table_name=".$table_name."\n"; if (ovrimos_fetch_row ($res, "Next")) { $table_id = ovrimos_result ($res, "table_id"); $table_name = ovrimos_result ($res, "table_name"); echo "table_id=".$table_id.", table_name=".$table_name."\n"; } else { echo "Next: erreur\n"; } } else { echo "First: erreur\n"; } ovrimos_free_result ($res); } ovrimos_close ($conn); } ?>
Cet exemple lit une ligne et l'affiche.
10.49.11 ovrimos_result
int ovrimos_result (int result_id, mixed field)
ovrimos_result() sert à lire le contenu d'une
colonne.
10.49.12 ovrimos_result_all
int ovrimos_result_all (int result_id, string format )
ovrimos_result_all() sert à afficher tout le résultat
d'une requête.
<?php $conn = ovrimos_connect ("db_host", "8001", "admin", "password"); if ($conn != 0) { echo "Connection établie!"; $res = ovrimos_prepare ($conn, "select table_id, table_name from sys.tables where table_id = 7"); if ($res != 0) { echo "Préparation faite!"; if (ovrimos_execute ($res, array(3))) { echo "Exécution réussie!\n"; ovrimos_result_all ($res); } else { echo "Exécution manquée!"; } ovrimos_free_result ($res); } else { echo "Préparation manquée!\n"; } ovrimos_close ($conn); } ?>
Cet exemple exécute une requête SQL et affiche le résultat sous forme
d'une table HTML.
<?php $conn = ovrimos_connect ("db_host", "8001", "admin", "password"); if ($conn != 0) { echo "Connection établie!"; $res = ovrimos_exec ($conn, "select table_id, table_name from sys.tables where table_id = 1") if ($res != 0) { echo "Requête effectuée! cursor=".ovrimos_cursor ($res)."\n"; $colnb = ovrimos_num_fields ($res); echo "Output columns=".$colnb."\n"; for ($i=1; $i<=$colnb; $i++) { $name = ovrimos_field_name ($res, $i); $type = ovrimos_field_type ($res, $i); $len = ovrimos_field_len ($res, $i); echo "Colonne ".$i." nom=".$name." type=".$type." longueur=".$len."\n"; } ovrimos_result_all ($res); ovrimos_free_result ($res); } ovrimos_close ($conn); } ?>
<?php $conn = ovrimos_connect ("db_host", "8001", "admin", "password"); if ($conn != 0) { echo "Connection établie!"; $res = ovrimos_exec ($conn, "update test set i=5"); if ($res != 0) { echo "Requête effectuée!"; echo ovrimos_num_rows ($res)." lignes affectées\n"; ovrimos_free_result ($res); } ovrimos_close ($conn); } ?>
10.49.13 ovrimos_num_rows
int ovrimos_num_rows (int result_id)
ovrimos_num_rows() retourne le nombre de lignes
affectées par une modification
10.49.14 ovrimos_num_fields
int ovrimos_num_fields (int result_id)
ovrimos_num_fields() indique le nombre de colonnes
du résultat result_id.
10.49.15 ovrimos_field_name
int ovrimos_field_name (int result_id, int field_number)
ovrimos_field_name() sert à obtenir le nom d'une
colonne.
10.49.16 ovrimos_field_type
int ovrimos_field_type (int result_id, int field_number)
ovrimos_field_type() sert à connaitre le type
numérique d'une colonne.
10.49.17 ovrimos_field_len
int ovrimos_field_len (int result_id, int field_number)
ovrimos_field_len() sert à connaître la taille
d'une colonne.
10.49.18 ovrimos_field_num
int ovrimos_field_num (int result_id, string field_name)
ovrimos_field_num() sert à connaître le nuémro de
colonne, à partir de son nom.
10.49.19 ovrimos_free_result
int ovrimos_free_result (int result_id)
ovrimos_free_result() sert à effacer un résultat.
10.49.20 ovrimos_commit
int ovrimos_commit (int connection_id)
ovrimos_commit() sert à exécuter une
transaction.
10.49.21 ovrimos_rollback
int ovrimos_rollback (int connection_id)
ovrimos_rollback() sert à annuler une transaction.
10.50 Expressions régulières compatibles Perl
La syntaxe des masques utilisés dans ces fonctions ressemble fort à celle de Perl.
Les expressions seront entourées de délimiteurs, slash (/), par exemple. N'importe
quel caractère peut servir de délimiteur, tant qu'il n'est pas alphanumérique
ou n'est pas un backslash (\). Si un délimiteur doit être utilisé dans
l'expression, il faudra l'échapper avec un backslash.
10.50.1 preg_match
int preg_match (string pattern, string subject, array matches)
preg_match() analyse subject
pour trouver l'expression pattern.
if (preg_match("/page\s+#(\d+)/i", "Go to page #9.", $parts)) print "La page suivante est $parts[1]"; else print "Page introuvable.";
Voir aussi preg_match_all(), preg_replace()
et preg_split().
10.50.2 preg_match_all
int preg_match_all (string pattern, string subject, array matches, int order)
preg_match_all() analyse subject
pour trouver l'expression pattern et met les résultats dans
matches, dans l'ordre spécifié par order.
preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", "Call 555-1212 or 1-800-555-1212", $phones);
10.50.3 preg_replace
mixed preg_replace (mixed pattern, mixed replacement, mixed subject)
preg_replace() analyse subject pour
trouver l'expression pattern et remplace les résultats par
replacement.
$patterns = array("/(19|20\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/"); $replace = array("\\3/\\4/\\1", "$\\1 ="); print preg_replace($patterns, $replace, "{startDate} = 1999-5-27"); Cet exemple va afficher : $startDate = 5/27/1999 preg_replace("/(<\/?)(\w+)([^>]*>)/e", "'\\1'.strtoupper('\\2').'\\3'", $html_body);Cela va mettre en majuscule toutes les balises HTML du texte.
10.50.4 preg_split
array preg_split (string pattern, string subject, int limit, int flags)
Note :
Le paramètre flags a été ajouté dans PHP Beta 3. $keywords = preg_split("/[\s,]+/", "hypertext language, programming");
Voir aussi preg_match(), preg_match_all()
et preg_replace().
10.50.5 preg_quote
string preg_quote (string str)
preg_quote() ajoute un backslash devant tous les caractères de
la chaîne str. Cela est très utile si vous avez une chaîne
qui va servir de masque, mais qui est générée durant l'exécution.
. \\ + * ? [ ^ ] $ ( ) { } = ! < > | :
Note :
Cette fonction a été ajoutée dans PHP 3.0.9.
10.50.6 preg_grep
array preg_grep (string pattern, array input)
preg_grep() retourne un tableau qui contient les éléments
de inputqui satisfont le masque
pattern.
preg_grep("/^(\d+)?\.\d+$/", $array); // recherche les nombres à virgule flottante
Note :
Cette fonction a été ajoutée dans PHP 4.0. 10.50.7 Options de recherche
Les options de PCRE sont listées ci dessous. Les noms entre parenthèses sont les
noms internes à PCRE.
10.50.8 Syntaxe des masques
La bibliothèque PCRE est un ensemble de fonctions qui implémentent la recherche par expressions régulières, en utilisant la même syntaxe et la même sémantique que le Perl 5, avec quelques nuances (voir ci-dessous). L'implémentation actuelle est celle de Perl 5.005. Les différences avec le Perl 5.005 sont présentée ici : 1. Par défaut, un caractère d'espacement correspond à n'importe quel caractère que la fonction C isspace() reconnaît, bien qu'il soit possible de recompiler la bibliothèque PCRE avec d'autres tables de caractères. Normalement, isspace() retourne TRUE pour les espaces, les retours chariot, les nouvelles lignes, les formfeed, les tabulations verticales et horizontales. Le Perl 5 n'accepte plus la tabulation verticale comme caractère d'espacement. La séquence \v qui était dans la documentation Perl depuis longtemps n'a jamais été reconnue. Cependant, la tabulation verticale elle-même était reconnue comme un caractère d'espacement jusqu'à la version 5.002. Avec les version 5.004 et 5.005, l'option \s l'ignore. 2. PRCE ne tolère pas la répétition de quantificateurs dans les expressions. Perl le permet, mais cela ne signifie pas ce que vous pourriez penser. Par exemple, (?!a){3} ne s'interprète pas : les trois caractères suivants ne sont pas des "a". En fait, cela s'interprète comme : le caractère suivant n'est pas "a" trois fois. 3. Les occurrences de sous-masques qui interviennent dans des assertions négatives sont comptées, mais elles ne sont pas enregistrées dans le vecteur d'occurrences. Perl modifie ses variables numériques pour toutes les occurrences de sous masque, avant que l'assertion ne vérifie le masque entier, et uniquement si les sous masques ne trouvent qu'une seule occurrence. 4. Bien que les caractères nul soient tolérés dans la chaîne de recherche, ils ne sont pas acceptés dans le masque, car le masque est utilisé comme une chaîne C standard, terminée par le caractère nul. Il faut donc utiliser la séquence d'échappement "\0" dans le masque pour rechercher les caractères nul. 5. Les séquence d'échappement suivantes ne sont pas supportées par le Perl: \l, \u, \L, \U, \E, \Q. En fait, elles sont implémentées par la gestion intrinsèque de chaînes du Perl, et ne font pas partie de ses caractères spéciaux. 6. L'assertion \G du Perl n'est pas supportée car elle n'est pas pertinente pour faire des recherches avec des masques uniques. 7. De manière assez évidente, PCRE n'accepte pas la construction (?{code}) 8. Au moment de l'écriture de PCRE, Perl 5.005_02 avait quelques comportement étranges avec la capture des chaînes lorsqu'une partie du masque est redoublée. Par exemple, "aba" avec le masque /^(a(b)?)+$/ va affecter à $2 la valeur "b", mais la même manipulation avec "aabbaa" et /^(aa(bb)?)+$/ laissera $2 vide. Cependant, si le masque est remplacé par /^(aa(b(b))?)+$/ alors $2 (et d'ailleurs $3) seront correctement affectés. Avec le Perl 5.004, $2 sera correctement affecté dans les deux cas, et c'est aussi vrai avec PCRE. Si Perl évolue vers un autre comportement cohérent, PCRE s'adaptera probablement 9. Une autre différence encore non résolue est le fait qu'en Perl 5.005_02 le masque /^(a)?(?(1)a|b)+$/ accepte la chaîne "a", tandis que PCRE ne l'accepte pas. Cependant, que ce soit avec Perl ou PCRE /^(a)?a/ et "a" laisseront $1 vide. 10. PCRE propose quelques extensions aux expressions régulières du Perl. (a) Bien que les assertions avec retour (lookbehind) soit obligée d'apparier une chaîne de longueur fixe, toutes les assertions avec retour peuvent avoir une longueur différente. Perl 5.005 leur impose d'avoir toutes la même longueur. (b) Si PCRE_DOLLAR_ENDONLY est mis, et que PCRE_MULTILINE n'est pas mis, le méta caractère $ ne s'applique qu'à la fin physqiue de la chaîne, et non pas avant les caractères de nouvelle ligne. (c) Si PCRE_EXTRA est mis, un backslash suivi d'une lettre sans signification spéciale est considérée comme une erreur. (d) SI PCRE_UNGREEDY est mis, la "gourmandise" des quantificateurs de répétition est inversées, ce qui est rend non gourmand par défaut, mais si ils sont suivis de ?, il seront gourmands. La syntaxe et la sémantique des expressions régulière supportées par PCRE sont décrites ci-dessous. Les expressions régulières sont aussi décrites dans la documentation Perl, et dans un grand nombre d'autres livres, avec de nombreux exemples. Jeffrey Friedl's "Mastering Regular Expressions", édité chez O'Reilly (ISBN 1-56592-257-3), les décrits en profondeur. Cette description est organisée comme une documentation de référence. Une expression régulière est un masque, qui est appliqué sur une chaîne sujet, de gauche à droite. La plus part des caractères se représentent eux-mêmes. Un exemple trivial : un masque qui serait Le rapide renard gris Pourra correspondre à une partie de la chaîne sujet qui sera identique au masque. La puissance des expressions régulières provient de leur capacité à autoriser des alternatives et des quantificateur de répétitions dans le masque. Ils sont encodés dans le masque par des meta-characters, qui ne représentent pas ce qu'ils sont, mais sont interprétés d'une certaine manière. Il y a deux sortes de méta-caractères : ceux qui sont reconnus n'importe oú dans un masque, hormis entre crochets, et ceux qui sont reconnus entre crochets. A l'extérieur des crochets, les méta caractères sont : \ Caractère d'échappement, avec de multiples usages. ^ Le début de la chaîne sujet (ou de ligne, en mode multiligne) $ La fin de la chaîne sujet (ou de ligne, en mode multiligne) . Remplace n'importe quel caractère, hormis le caractère de nouvelle ligne (par défaut) ; [ Caractère de début de définition de classe ] Caractère de fin de définition de classe | Caractère de début d'alternative ( Caractère de début de sous masque ) Caractère de fin de sous masque ? Etend le sens de ( mais aussi quantificateur de 0 ou 1 mais aussi quantificateur de minimisation * Quantificateur de 0 ou plus + Quantificateur de 1 ou plus { Caractère de début de quantificateur minimum/maximum La partie du masque qui est entourée de crochet et appelé une classe de caractères. Dans les classes de caractères, les seul méta caractères autorisés sont \ Caractère d'échappement, avec de multiples usages ^ négation de la classe, mais uniquement si placé tout au début de la classe - indique un intervalle de caractères ] termine la classe de caractères La section suivante décrit l'utilisation de chaque méta caractères : BACKSLASH Le caractère backslash a de nombreuses utilisations. En premier lieu, si il est suivi d'un caractère non alpha numérique, il ne prendra pas la signification spéciale qui y est rattachée. Cette utilisation du backslash comme caractère d'échappement s'applique à l'intérieur et à l'extérieur des classes de caractères. Par exemple, pour recherche le caractère étoile "*", il faut écrire dans le masque : "\*". Cela s'applique dans tous les cas, que le caractère qui suive soit un méta-caractère ou non. C'est un moyen sur pour s'assurer qu'un caractère sera recherché pour sa valeur litérale, plutot que pour sa valeur spéciale. En particulier, pour rechercher les backslash, il faut écrire : "\\". Si un masque est utilisé avec l'option PCRE_EXTENDED, les espaces blancs du masque, mais qui ne sont pas dans une classe de caractères, et les caractères entre dièses "#", ainsi que les nouvelles lignes sont ignorées. Le backslash peut être utilisé pour échapper et ainsi rechercher un espace ou un dièse. La deuxième utilité du backslash est de pouvoir coder des caractères invisibles dans les masques. Il n'y a pas de restriction sur la place de ces caractères invisibles, hormis pour le caractère nul qui doit terminer le masque. Lors de la préparation du masque, il est souvent plus pratique d'utiliser les séquences d'échappement suivantes, plutôt que le caractère binaire qu'elle représente : \a alarme, c'est à dire le caractère BEL (hex 07) \cx "control-x", avec x qui peut être n'importe quel caractère. \e escape (hex 1B) \f formfeed (hex 0C) \n nouvelle ligne (hex 0A) \r retour chariot (hex 0D) \t tabulation (hex 09) \xhh caractère en hexadécimal, de code hh \ddd caractère en octal, de code ddd, ou référence arrière Dans la séquence "\cx" si "x" est en minuscule, il est converti en majuscule. Puis, le bit 6 (hex 40) est inversé. Ainsi "\cz" devient 1A, mais "\c{" devient hex 3B, tandis que "\c;" devient hex 7B. Après "\x", deux caractères hexadécimaeux sont lus (les lettres peuvent être en majuscule ou minuscule). Après "\0", deux caractères octal sont lus. Dans chacun des cas, le méta-caractère tente de lire autant de caractère que possible. Ainsi la séquence "\0\x\07", sera comprise comme deux caractères nuls, suivi d'un caractère alarme (BEL). Assurez vous que vous fournissez suffisamment de chiffres après le méta-caractère. La gestion de la séquence "\y", avec y <> 0 est plutot compliquée. En dehors des caractères de classes, PCRE va lire y et tous les caractères qui suivent comme des chiffres décimaux. Si y est plus petit que 10, ou bien si il y a déjà eu au moins autant de parenthèses ouvrantes auparavant, la séquence est prise pour une référence de retour. Le détail sera vu ultérieurement, après la section sur les sous-masques. A l'intérieur d'un caractère de classe, ou si y est plus grand que 10, et qu'il n'y a pas eu assez de parenthèses ouvrantes auparavant, PCRE lis jusqu'à 3 chiffres octals à la suite du backslash, et génére un octet unique, à partir des 8 bits de poids faible de la séquence. Tous les chiffres qui suivent ne sont pas interprétés, et se representent eux-mêmes. Par exemple, \040 est une autre manière d'écrire un espace \40 est identique, dans la mesure oú il n'y a pas 40 parenthèses ouvrantes auparavant. \7 est toujours une référence de retour. \11 peut être une référence de retour, ou une tabulation, tandis que \011 est toujours une tabulation \011 est toujours une tabulation \0113 est une tabulation suivi du caractère "3" \113 est le caractère 113 (étant donné qu'il ne peut y avoir plus de 99 référence de arrière) \377 est un octet dont tous les bits sont à 1 \81 peut être soit une référence de arrière, soit le caractère NULL, suivi des caractères "8" et "1" Les valeurs octales supérieures ou égales à 100 ne doivent pas être introduite par un 0, car seuls les trois premiers octets seront lus. Toutes les séquences qui définissent une valeur d'un seul octet peuvent être utilisé dans les classes de caractères, et à l'extérieur. De plus, dans une classe de caractère, la séquence "\b" est interprétée comme un caractère effacer (backspace, hex 08). A l'extérieur d'une classe de caractères, il peut avoir d'autres significations (voir ci-dessous). On peut encore se servir de backslash pour préciser des types génériques de valeurs : \d tout caractère décimal \D tout caractère qui n'est pas un caractère décimal \s tout caractère blanc \S tout caractère qui n'est pas un caractère blanc \w tout caractère de "mot" \W tout caractère qui n'est pas un caractère de "mot" Chaque paire précédente définit une partition de la table des caractères : les deux ensembles sont disjoints. Un caractère satisfera soit un méta-caractère, soit l'autre. Un caractère de "mot" sera une lettre, un chiffre ou le caractère souligné, c'est à dire un caractère qui pourra être une partie d'un mot Perl. La définition des lettres et chiffres est définie par les tables de caractères de PCRE, et peut varier suivant la table locale de caractère (voir "Tables de caractères locales ", ci-dessus. Par exemple, dans la configuration français ("fr"), certains caractères ont des codes supérieurs à 128, pour les caractères accentués, et ils seront compris par le méta caractère \w. Ces séquences de caractères peuvent apparaître à l'intérieur ou à l'extérieur des classes de caractères. Elles remplacent à chaque fois un caractère du type correspondant. Si cette séquence est mis en fin de masque, et qu'il n'y a plus de caractère à comparer dans la chaîne sujet, la recherche échoue. La quatrième utilisation du backslash intervient lors d'assertions simples. Une assertion impose une condition à un certain point, sans remplacer de caractère. L'utilisation de sous-masques pour réaliser des assertions plus complexes est décrites plus bas. Les assertions avec backslash sont les suivantes : \b limite de mot \B pas limite de mot \A début de la chaîne sujet (indépendant du mode multi-lignes) \Z fin de la chaîne sujet ou nouvelle ligne à la fin de la chaîne sujet (indépendant du mode multi-lignes) \z fin de la chaîne sujet (indépendant du mode multi-lignes) Ces assertions ne peuvent pas apparaître dans une classe de caractère (mais "\b" a une autre signification à l'intérieur d'une classe de caractères). Une limite de mot est un emplacement dans la chaîne sujet ou un caractère et son suivant ne sont pas en même temps des caractères de mot, ou le contraire (on peut le voir comme \w\W ou \W\w), ou encore le premier ou le dernier caractère est un caractère mot. Les assertions \A, \Z, et \z diffèrent des méta caractères ^et $ dans la mesure oú ils ne sont pas dépendants des options, notamment PCRE_NOTBOL ou PCRE_NOTEOL. La différence entre \Z et \z tient au fait que \Z recherche les positions avant les nouvelles lignes et à la fin de la chaîne sujet, tandis que \z ne recherche que la fin de la chaîne. CIRCUMFLEX et DOLLAR En dehors d'une classe de caractère, avec les options par défaut, ^ est une assertion qui n'est vraie que si elle est placée tout au début de la chaîne. A l'intérieur d'une classe de caractère, ^a un tout autre sens (voir ci-dessous). ^ n'a pas besoin d'être le premier caractère du masque, si plusieurs alternatives sont proposées, mais il doit être placé en premier dans chaque alternative. Si toutes les alternatives commencent par ^, alors le masque est dit ancré (il y a une autre construction qui porte cette appellation). $ est une assertion qui n'est vraie que si elle est placée tout en fin de chaîne ou juste avant un caractère de nouvelle ligne qui serait le dernier caractère de la chaîne. A l'intérieur d'une classe de caractère, ^a un tout autre sens (voir ci-dessous). $ n'a pas besoin d'être le dernier caractère du masque, si plusieurs alternatives sont proposées, mais il doit être placé en dernier dans chaque alternative. Si toutes les alternatives finissent par $, alors le masque est dit ancré (il y a une autre construction qui porte cette appellation). $ n'a pas de valeur particulière dans une classe de caractères. La signification de $ peut changer, de manière à l'amener à ce qu'il ne puisse se trouver qu'en toute fin de la chaîne sujet. Cela se fait en ajoutant l'option PCRE_DOLLAR_ENDONLY au moment de la compilation, ou de l'exécution. Cette option est inopérante sur \Z. La signification de ^ peut changer, de manière à l'amener à ce qu'il puisse se trouver immédiatement avant et immédiatement après un caractère de nouvelle ligne "\n". Cela se fait en ajoutant l'option PCRE_MULTILINE au moment de la compilation, ou de l'exécution. Par exemple, le masque /^abc$/ accepte la chaîne "def\nabc" uniquement en mode multi-lignes. Par conséquent, toutes les parties du masques qui commencent par "^" ne sont pas ancrées, en mode multi ligne. L'option PCRE_DOLLAR_ENDONLY est ignorée si l'option PCRE_MULTILINE est choisie. Notez que les méta caractères \A, \Z, et \z peuvent servir à répérer le début et la fin du sujet, et toutes les parties du masque qui commenceront par \A seront toujours ancrées, avec l'option PCRE_MULTILINE ou non. FULL STOP (PERIOD, DOT) En dehors d'une classe de caractères, un point remplace n'importe quel caractère, même invisible et à l'exception du caractère de nouvelle ligne. Avec l'option PCRE_DOTALL le point remplace n'importe quel caractère, même le caractère de nouvelle ligne. La gestion des points et complètement indépendante de ^et $. Le seul point commun est que les deux ont un comportement particulier vis à vis des caractère de nouvelle ligne. Le point n'a pas de comportement particulier dans une classe de caractères. SQUARE BRACKETS Un crochet ouvrant introduit une classe de caractère, et le crochet fermant la conclut. Le crochet fermant n'a pas de signification en lui même. Si le crochet fermant est nécessaire à l'intérieur d'une classe de caractères, il faut qu'il soit le premier caractère (après un ^ éventuel) ou échappé avec un backslash. Une classe de caractère remplace un seul caractère dans la chaîne sujet, à moins que le premier caractère de la classe soit un ^, qui représente une négation : le caractère ne doit pas se trouver dans la classe. Si ^ est nécessaire dans la classe, il suffit qu'il ne soit pas le premier caractère, ou bien qu'il soit échappé avec un backslash. Par exemple, le caractère [aeiou] remplace n'importe quelle voyelle minuscule, tandis que [^aeiou] remplace n'importe quelle caractère qui n'est pas une voyelle minuscule. ^ est une notation pratique pour spécifier des caractères qui sont dans une classe, en ne citant que ceux qui n'y sont pas. Le comportement est inchangé. Avec l'option d'insensibilité à la casse, toutes les lettres d'une classe de caractère représentent en même temps la majuscule et la minuscule. Par exemple, [aeiou] représentera "A" ou "a", et [^aeiou] n'acceptera pas "A", tandis que sans l'option, elle l'accepterait. Le caractère de nouvelle ligne n'est pas traité de manière spéciale dans les classes de caractère, quelque soit l'option PCRE_DOTALL ou PCRE_MULTILINE. Une classe telle que [^a] acceptera toujours une nouvelle ligne. Le signe moins (-) est utilisé pour spécifier un intervalle de caractères, dans une classe. Par exemple, [d-m] remplace toutes les lettres entre d et m inclus. Si le caractère moins est requis dans une classe, il faut l'échapper avec un backslash, ou le faire apparaître à une position ou il ne pourra pas être interprété comme une indication d'intervalle, c'est à dire au début ou à la fin de la classe. Il n'est pas possible d'avoir le caractère "]" comme fin d'intervalle. Un masque tel que [W-]46] est compris comme la classe de caractère contenant deux caractères ("W" et "-") suivi de la chaîne littérale "46]", ce qui fait qu'il va accepter "W46]" ou "-46]". Cependant, si "]" est échappé avec un backslash, le masque [W-\]46] est interprété comme une classe d'un seul caractère, contenant un intervalle de caractère. La valeur octale ou hexadécimale de "]" peuvent aussi être utilisée pour déterminer les limites de l'intervalle. Les intervalles travaillent sur des séquences ASCII. Elles peuvent aussi être précisées avec des valeurs numériques, par exemple [\000-\037]. Si cet intervalle inclus des lettres utilisées avec une option d'insensibilité de casse, les majuscules ou minuscules correspondantes seront aussi incluses. Par exemple, [W-c] est équivalent é [][\^_`wxyzabc], avec l'option d'insensibilité de casse. Si la table locale de caractère est "fr", [\xc8-\xcb] correspond aux caractères accentués. Les types de caractères \d, \D, \s, \S, \w, et \W peuvent aussi intervenir dans les classes de caractères. Par exemple, [\dABCDEF] acceptera n'importe quel caractère hexadécimal. Un accent circonflexe peut aussi être utilisé pour spécifier adroitement des ensembles de caractères plus restrictifs : par exemple [^\W_] accepte toutes les lettres et les chiffres, mais pas les soulignés. Tous les caractères non alphanumériques autres que \, -, ^ (placé en début de chaîne) et ] n'ont pas de significations particulière, mais ils ne perdront rien à être échappés. VERTICAL BAR La barre verticale sert à séparer des alternatives. Par exemple, dans le masque dupont|martin recherche soit "dupont", soit " martin ". Le nombre d'alternative n'est pas limité, et il est même possible d'utiliser la chaîne vide. Lors de la recherche, toutes les alternatives sont essayées, de gauche à droit, et la première qui est acceptée, est utilisée. Si les alternatives sont dans un sous masque, elle ne réussiront que si le masque principal réussi aussi. INTERNAL OPTION SETTING Les options PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, et PCRE_EXTENDED peuvent être changée depuis le masque lui-même, avec des séquences mises "(?" et ")". Les options sont i pour PCRE_CASELESS m pour PCRE_MULTILINE s pour PCRE_DOTALL x pour PCRE_EXTENDED Par exemple, (?im) rend le masque insensible à la casse, et multi-lignes. Il est possible d'annuler ces options en les faisant précéder par un signe - : par exemple (?im-sx), ajoutera les options PCRE_CASELESS et PCRE_MULTILINE mais annulera les options PCRE_DOTALL et PCRE_EXTENDED. Si une option apparaît avant et après le signe moins, l'option sera annulée. Le domaine d'application de ces options dépend de la position de la séquence d'option. Pour toutes les séquences d'options qui sont hors des sous masques (définis plus loin), l'effet est le même que si l'option avait été fixée dès le début de la recherche. Les exemples suivants se comportent tous de la même façons : (?i)abc a(?i)bc ab(?i)c abc(?i) et sont parfaitement équivalents au masque abc avec l'option PCRE_CASELESS. En d'autres termes, mettre des séquences d'options dans le corps principal du masque revient à appliquer l'option à tout le masque, sauf ordre contraire dans les sous masques. Si il y a plusieurs séquences d'option qui portent sur la même optin, la dernière s'appliquera. Si une option intervient dans un sous-masque, le comportement est différent. C'est un changement de comportement apparu en Perl 5.005. Une option à l'intérieur d'un sous masque n'affecte que cette partie du masque, ce qui fait que (a(?i)b)c acceptera abc et aBc mais aucune autre chaîne (en supposant que PCRE_CASELESS n'est pas utilisé). Cela signifie que les options permettent d'avoir différente configuration de recherche pour différentes parties du masque. Une séquence d'option dans une alternative affecte toute l'alternative. Par exemple : (a(?i)b|c) accepte "ab", "aB", "c", et "C", même si, comme dans le cas de "C", la première alternative qui porte l'option n'est pas prise en compte. Sinon, cela risque d'introduire des comportements très étranges : Les options spécifiques à PCRE telles que PCRE_UNGREEDY et PCRE_EXTRA peuvent être modifiées de la même manière, en utilisant respectivement les caractères U et X. L'option (?X) est particulière, car elle doit toujours intervenir avant toutes les autres options, même au niveau du masque entier. Il vaut mieux la mettre au début du masque. SUBPATTERNS Les sous masques sont délimités par des parenthèses, et peuvent être imbriquées. Ajouter des sous masques a deux utilités : 1. Délimiter des alternatives. Par exemple, le masque cat(aract|erpillar|) acceptera les mots "char", "chardon", ou "charmant". Sans les parenthèses, il n'accepterait que "chardon", "mant" ou la chaîne vide. 2. Le sous masque est considéré comme capturante : Lorsqu'une chaîne sujet est acceptée par le masque complet, les sous masques sont transmis à l'appelant grâce à un vecteur de sous masques. Les parenthèses ouvrantes sont comptées de gauche à droite, (commencant à 1). Par exemple, soit la chaîne sujet "le roi soleil " qui est utilisée avec le masque suivant : Le ((roi|prince) (soleil|charmant)) les sous masques capturé sont "roi soleil ", "roi", et "soleil", numérotés respectivement 1, 2, et 3. L'ubiquité des parenthèses n'est pas toujours simple d'emploi. Il y a des moments oú regrouper des sous masques est nécessaire, sans pour autant capturer la valeur trouvée. Si une parenthèse ouvrante est suivie de "?:", le sous masque ne capture pas la chaîne assortie, et ne sera pas compté lors de la numérotation des captures. Par exemple, avec la chaîne "le prince charmant", utilisé avec le masque pattern Le (( ?roi|prince) (soleil|charmant)) les chaînes capturées seront "prince charmant " et "charmant", numérotés respectivement 1 et 2. Le nombre maximal de chaîne capturées est de 99, et le nombre total de sous masque (capturant ou non) ne doit pas dépasser 200. (?i:samedi|dimanche) (?:(?i) samedi | dimanche) De plus, comme les séquences d'options sont valables sur toute une alternative, le masque ci dessus acceptera aussi "DIMANCHE" que "Dimanche". REPETITION les Répétitions sont spécifiées avec des quantificateurs, qui peuvent être placés à la suite des caractères suivants : Un caractère unique, même s'il s'agit d'un méta caractère Une classe de caractères Une référence de retour (Voir section suivante) Un sous masque avec parenthèses (a moins que ce ne soit une assertion, voir plus loin) Les quantificateurs généraux précisent un nombre minimum et maximum de répétitions possibles, donnés par deux nombres entre accolades, et séparés par une virgule. Ces nombres doivent être plus petit que 65536, et le premier nombre doit être égal ou inférieur au second. Par exemple z{2,4} accepte "zz", "zzz", ou "zzzz". L'accolade fermante n'a pas de signification par elle même. Si le second nombre est omis, mais que la virgule est là, cela signifie qu'il n'y a pas de limite supérieure. Si le second nombre et la virgule sont omis, le quantificateur correspond au nombre exact de répétition attendues. Par exemple : [aeiou]{3,} accepte n'importe quelle succession d'au moins 3 voyelles minuscules, tandis que \d{8} n'accepte que 8 chiffres exactements. Une accolade ouvrante qui apparaît à une position oú un quantificateur n'est pas accepté, ou si la syntaxe des quantificateurs n'est pas respectée, elle sera considérée littérale. Par exemple, {,6} n'est pas un quantificateur, mais une chaîne de 4 caractères. Le quantificateur {0} est autorisé, mais l'expression est alors ignorée. * équivalent à {0,} + équivalent à {1,} ? équivalent à {0,1} Il est possible de constituer des boucles infinies en créant un sous masque sans caractères, mais pourvu d'un quantificateur sans limite supérieure. Par exemple (a?)* Les versions plus anciennes de Perl et PCRE généraient alors une erreur au moment de la compilation. Cependant, étant donné qu'il existe des situations oú ces constructions peuvent être utiles, ces masques sont désormais autorisés. Cependant, si la répétion du sous masque ne trouve aucun caractère, la boucle est interrompue. Par défaut, les quantificateurs sont "gourmands", c'est à dire, qu'ils cherchent d'abord à trouve le nombre maximal de répétitions qui autorise le succès de la recherche. L'exemple classique posé par cette gourmandise est la recherche de commentaire d'un programme en C. Les commentaires apparaissent entre les séquences /* et */ et à l'intérieur de ces délimiteurs, les * et / sont autorisés. Appliquer le masque /\*.*\*/ à la chaîne /* first commet */ not comment /* second comment */ ne peut réussir, car le masque travaille sur toute la chaîne, à cause de la gourmandise du caractère .*. Cependant, un quantificateur suivi d'un point d'interrogation cesse d'être gourmand, et au contraire, ne recherche que le nombre minimum de répétition. Dans ces conditions, le masque /\*.*?\*/ trouvera bien les commentaires du code C. La signification des autres quantificateurs n'est pas changée. Attention à ne pas confondre l'utilisation du point d'interrogation ici avec son utilisation comme quantificateur lui même. A cause cette ambiguité, il peut apparaître des situations oú il faut le doubler : \d??\d Ce masque va tenter de lire un seul chiffre, mais le cas échéant, il acceptera 2 chiffres pour permettre à la recherche d'aboutir. Si l'option PCRE_UNGREEDY est mise, (une option qui n'est pas disponible avec Perl) alors les quantificateurs sont non gourmand par défaut, mais peuvent être rendu gourmand au cas par cas, en ajoutant un point d'interrogation après. En d'autres termes, cette option inverse le comportement par défaut. Lorsqu'un sous masque est quantifié avec un nombre minimum de répétition, qui soit plus grand que 1, ou avec un maximum de répétition, le masque compilé aura besoin de plus de place de stockage, proportionnellement au minimum et au maximum. Si un masque commence par..* ou .{0,} et que l'option PCRE_DOTALL (équivalent en Perl à /s) est mise, c'est à dire en autorisant le remplacement des nouvelles lignes par un méta caractère, alors le masque est implicitement ancré, car tout ce qui suit va être mangé par la première séquence, et se comportera comme si le masque se terminait par le méta caractère \A. Dans le cas oú on sait d'avance qu'il n'y aura pas de caractère de nouvelle ligne, mettre l'option PCRE_DOTALL et commencer le masque par.* permet d'optmiser le masque. Alternativement, on peut utiliser ^ pour ancrer explicitement le masque. Lorsqu'un sous masque capturant est répété, la valeur capturée est la dernière. Par exemple, après que (inter[net]{3}\s*)+ *)+ ai été appliqué à "internet interne" la valeur de la chaîne capturée est "interne". Cependant, si il y a des sous masques imbriqués, la valeur capturée correspondante peut l'avoir été lors des précédentes itérations. Par exemple : /(a|(b))+/ accepte "aba" et la deuxième valeur capturée est Références arrières (back references) En dehors des classes de caractères, un backslash suivi d'un nombre plus grand que 0 (et possiblement plusieurs chiffres) est une référence arrière (c'est à dire vers la gauche) dans le masque, en supposant qu'il y ait suffisamment de sous masques capturant précédent. Cependant, si le nombre décimal suivant le backslash est plus petit que 10, il sera toujours considéré comme une référence arrière, et cela générera une erreur si le nombre de capture n'est pas suffisant. En d'autres termes, il faut qu'il existe suffisamment de parenthèses ouvrantes à gauche de la référence, surtout si la référence est inférieure à 10. Reportez vous à la section "Backslash" pour avoir de plus amples détails à propos du nombre de chiffres qui suivent le backslash. La référence arrière remplace ce qui a été capturé par un sous masque dans le masque courant, plutôt que remplace le sous masque lui même. Ainsi (calme|rapide) et \1ment trouvera "calme et calmement " et "rapide et rapidement ", mais pas " calme et rapidement ". Si la recherche tiens compte de la casse, alors la casse de la chaîne capturée sera importante. Par exemple, ((?i)rah)\s+\1 trouve "rah rah" et "RAH RAH", mais pas "RAH rah", même si le sous masque capturant initial ne tenait pas compte de la casse. Il peut y avoir plusieurs références arrières dans le même sous masque. Si un sous masque n'a pas été utilisé dans une recherche, alors les références arrières échoueront. Par exemple (a|(bc))\2 ne réussira jamais si la chaîne sujet commence par "a" plutôt que par "bc". Etant donné qu'il peyt y avoir jusqu'à 99 références arrières, tous les chiffres après le backslash sont considérés comment faisant potentiellement partie de la référence arrière. Si le masque recherche un chiffre après la référence, alors il faut impérativement utiliser des délimiteurs pour terminer la référence arrière. Si l'option PCRE_EXTENDED est mise, on peut utiliser un espace. Sinon, un commentaire vide fait l'affaire. Une référence arrière qui intervient à l'intérieur de parenthèses auquel elle fait référence échouera dès que le sous masque sera utilisé. Par exemple, (a\1) échouera toujours. Cependant, ces références peuvent être utiles dans les sous masques répétitifs. Par exemple, le masque (a|b\1)+ pourra convenir pour "a", "aba", "ababaa" etc. A chaque itération du sous masque, la référence arrière utilise le résultat du dernier sous masque. Pour que cela fonctionne, il faut que la première itération n'ai pas besoin d'utiliser la référence arrière. Cela arrive avec les alternatives, comme dans l'exemple ci dessus, ou avec un quantificateur de minimum 0. Les assertions Une assertion est un test sur les caractères suivants ou précédent celui qui est en cours d'étude. Ce test ne consomme par de caractère (ie, on ne déplace pas le pointeur de caractères). Les assertions simples sont codées avec \b, \B, \A, \Z, \z, ^ et $, et sont décrite précédemment. Il existe cependant un type d'assertion plus complexe, codées sous la forme de sous masques. Il en existe deux types : ceux qui travaille au dela de la position courante, et ceux qui travaille en deça. \w+(?=;) Une assertion se comporte comme un sous masque, hormis le fait qu'elle ne déplace pas le pointeur de position. Les assertions avant commencent par (?= pour les assertions positives et par (?! pour des assertions négatives. Par exemple : foo(?!bar) s'assure qu'un mot est suivi d'un point virgule, mais n'inclus pas le point virgule dans la capture. D'autre part, (?!foo)bar en est proche, mais ne trouve pas une occurrence de "bar" qui soit précédée par quelque chose d'autre que "foo"; il trouve toutes les occurrences de "bar", quelque soit ce qui le précéde, car l'assertion (?!foo) est toujours vraie quand les trois caractères suivants sont "bar". Une assertion arrière est ici nécessaire. Ces assertions commencent par (?<= pour les assertions positives, et (?<! pour les assertions négatives. Par exemple : (?<!foo)bar trouve les occurrences de "bar" qui ne sont pas précédées par "foo". Le contenu d'une référence arrière est limité de tel façon que les chaînes qu'il utilise sont toujours de la même taille. Cependant, lorsqu'il y a plusieurs alternatives, elles n'ont pas besoin d'être de la même taille. (?<=bullock|donkey) est autorisé, tandis que (?<!dogs?|cats?) provoque une erreur de compilation. Les alternatives qui ont des longueurs différentes ne sont autorisées qu'au niveau supérieur des assertions arrières. C'est une amélioration du fonctionnement de Perl 5.005, qui impose aux alternatives d'avoir toutes la même taille. Une assertion telle que (?<=ab(c|de)) n'est pas autorisée, car l'assertion de bas niveau (la deuxième, ici) a deux alternatives de longueurs différentes. Pour la rendre acceptable, il faut écrire (?<=abc|abde) L' implémentation des assertions arrières déplace temporairement le pointeur de position vers l'arrière, et cherche à vérifier l'assertion. Si le nombre de caractère est différent, la position ne sera pas correcte, et l'assertion échouera. La combinaison d'assertions arrières avec des sous masques peut être particulièrement pratique à fin des chaînes. Un exemple est donné à la fin de cette section. Plusieurs assertions peuvent intervenir successivement. Par exemple (?<=\d{3})(?<!999)foo recherche les chaînes "foo" précédée par trois chiffres qui ne sont pas "999". De plus, les assertions peuvent être imbriquées : (?<=(?<!foo)bar)baz recherche les occurrences de "baz" qui sont précédées par "bar", qui, à son tour, n'est pas précédé par "foo". Les assertions ne sont pas capturantes, et ne peuvent pas être répétées. Si une assertion contient des sous masques capturants en son sein, ils seront compris dans le nombre de sous masques capturants du masque entier. La capture est réalisée pour les assertions positives, mais cela n'a pas de sens pour les assertions négatives. 200 assertions au maximum sont autorisées. Sous masques uniques (ONCE-ONLY SUBPATTERNS) Avec les quantificateurs de répétitions, l'échec d'une recherche conduit normalement à une autre recherche, avec un nombre différent de répétitions, pour voir si le masque ne s'applique pas dans d'autres conditions. Parfois, il est pratique d'éviter ce comportement, soit pour changer la nature de la recherche, soit pour la faire abandonner plus tôt, si on pense qu'il n'est pas besoin d'aller plus loin. Considérons par exemple, le masque \d+foo appliqué à la ligne 123456bar Après avoir tenté d'utiliser les 6 chiffres suivi de "foo" qui fait échouer, l'action habituelle sera de réessayer avec 5 chiffres, puis avec 4, et ainsi de suite jusqu'à l'échec final. Un sous masque évalué une seule fois permettrait d'indiquer que lorsqu'une partie du masque est trouvée, elle n'a pas besoin d'être réévaluée à chaque tentative. Ceci conduirait à ce que la recherche échoue immédiatement après le premier test. Ces assertions ont leur propre notation, commencant avec (?>comme ceci : (?>\d+)bar Après avoir tenté d'utiliser les 6 chiffres suivi de "foo" qui fait échouer, l'action habituelle sera de réessayer avec 5 chiffres, puis avec 4, et ainsi de suite jusqu'à l'échec final. Un sous masque évalué une seule fois permettrait d'indiquer que lorsqu'une partie du masque est trouvée, elle n'a pas besoin d'être réévaluée à chaque tentative. Ceci conduirait à ce que la recherche échoue immédiatement après le premier test. Ces assertions ont leur propre notation, commencant avec (?>comme ceci : (?>\d+)bar Ce type de parenthèses verrouille le sous masque qu'il contient un fois qu'il a été trouvé, et empêche un échec ultérieur d'y repasser, mais autorise à revenir plus loin en arrière. Une autre description est que les sous masques de ce type recherche les chaînes de caractères, et les ancre le sous masque à l'intérieur de la chaîne. Les sous masques uniques ne sont pas capturants. Des cas simples comme ceux présentés ci dessus peuvent être pris comme des situations maximisantes, qui réservent le maximum de caractères. En effet, alors que \d+ et \d+? ajustent le nombre de chiffres trouvés de manière à laisser la possibilité au masque de réussir, (?>\d+) ne peut retenir que la séquence entière de chiffres. Cette construction peut contenir un nombre arbitraire de sous masques complexes, et ils peuvent être imbriqués. Les sous masques uniques ne peuvent être utilisés qu'avec les assertions arrières, pour effectuer une recherche efficace en fin de chaîne. Considérons un masque simple tel que abcd$ appliqué à une très longue chaîne qui ne lui correspond pas. A cause du système de recherche de gauche à droite, PCRE va commencer par rechercher un "a" dans la chaîne sujet, puis vérifier si ce qui suit convient au reste du masque. Si le masque est spécifié sous la forme ^.*abcd$ alors, la séquence.* remplace en premier lieu la chaîne entière, et échoue, repart en arrière, et remplace tous les caractères sauf le dernier, échoue, retourne en arrière, prend un caractère de moins, etc... et ainsi de suite. Encore une fois, la recherche du "a" passe en revue toute la chaîne de gauche à droite, ce qui n'est pas très efficace. Par contre, si le masque était écrit ^(?>.*)(?<=abcd) alors il n'y aurait pas de retour en arrière, pour satisfaire la séquence.*; car elle ne peut que remplacer toute la chaîne. L'assertion arrière consécutive va alors faire un test sur les 4 derniers caractères. Si elle échoue, la recherche est immédiatement interrompue. Pour les chaînes très longues, cette approche fait la différence en terme de performance et de temps de recherche. Les sous masques conditionnels (CONDITIONAL SUBPATTERNS) Il est possible de lier un sous masque à un une condition, ou de choisir entre deux sous masques alternatifs, en fonction du résultat d'une assertion, ou suivant les résultats de recherche précédents. Les deux formes possibles de sous masques conditionnels sont (?(condition)masque positif) (?(condition) masque positif | masque négatif) Si les conditions sont satisfaites, le masque positif est utilisé, sinon, le masque négatif est utilisé, si présent. Si il y a plus de deux alternatives, une erreur est générée à la compilation. Il y a deux types de conditions. Si le texte entre les parenthèses est une séquence de chiffre, alors la condition est satisfaite si le sous masque correspondant à ce numéro a réussi. Considérons le masque suivant, qui contient des espaces non significatif pour le rendre plus compréhensible (on supposera l'option PCRE_EXTENDED mise) et qui est divisé en trois parties pour simplifier les explications ( \( )? [^()]+ (?(1) \) ) La première partie recherche une parenthèse ouvrante optionnelle, et si elle existe, elle est capturée. La deuxième partie recherche un séquence de caractères qui ne contient pas de parenthèses. La troisième partie est conditionnée à la première, et s'assure que si il y avait une parenthèse ouvrante, il en existe une fermante. Si une parenthèse ouvrante a été trouvée, elle a été capturée, et donc la première capture existe, et la condition est exécutée. Sinon, elle est ignorée. Ce masque recherche donc une séquence de lettre, éventuellement mis entre parenthèse. Si la condition n'est pas une séquence de nombre, il faut que ce soit une assertion. Ce peut être une assertion positive ou négative, arrière ou avant. Considérons le masque suivant (même conditions que le précédent) et avec deux alternatives en seconde ligne : (?(?=[^a-z]*[a-z]) \d{2}[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) La condition est une assertion avant positive, qui recherche une séquence optionnelle de caractère non-lettre. En d'autres termes, elle teste la presence d'au moins une lettre dans la chaîne sujet. Si une lettre est trouvée, la recherche se poursuit avec la première alternative, et sinon, avec la seconde. Ce masque recherche des chaînes de la forme dd-aaa-dd ou dd-dd-dd, avec aaa qui sont des lettres, et dd qui sont des chiffres COMMENTS La séquence (?# marque le début des commentaires, qui se termine à la prochaîne parenthèse fermante. Les parenthèses imbriquées ne sont pas autorisées. Les caractères entre ces délimiteurs ne jouent alors aucun rôle dans le masque. Si l'option PCRE_EXTENDED est mise, les caractères dièses # non échappés en dehors d'une classe de caractères introduisent un commentaire qui continuera jusqu'à la prochaîne ligne dans le masque. PERFORMANCE Certaines séquences de recherches sont plus efficaces que d'autres. Ainsi, il est plus efficace d'utiliser une classe de caractères telle que [aeiou] plutôt qu'une alternative (a|e|i|o|u). En général, le masque le plus simple, qui permette la recherche désirée est généralement le plus efficace. Le livre de Jeffrey Friedl's contient de nombreuses études à propos de l'optimisation des expressions régulières. Lorsqu'un masque commence par.* et que l'option PCRE_DOTALL est mise, le masque est implicitement ancré par PCRE, étant donné qu'il ne peut que rechercher au début de la chaîne. Cependant, si option PCRE_DOTALL n'est pas mise, PCRE ne peut faire aucune optimisation ca le méta-caractères point (). ne remplace pas une nouvelle ligne, et si la chaîne sujet contient des nouvelles lignes, le masque peut trouver une solution qui serait située juste après une de ces nouvelles lignes, et non pas seulement au début de la chaîne sujet. Par exemple, le masque, (.*) second acceptera la chaîne "premier \net second" (avec \n qui remplace la nouvelle ligne), et la première chaîne capturée sera "et". Afin d'effectuer la recherche, PCRE va essayer d'appliquer le masque à partir de chaque début de ligne. Si vous utilisez un tel masque avec des chaînes qui ne contiennent pas de caractères de nouvelles lignes, les meilleures performances seront atteintes avec l'option PCRE_DOTALL, ou en ancrant le masque avec ^.*. Cela évite à PCRE de scanner toute la chaîne pour rechercher un caractère de nouvelle ligne et recommencer la recherche. 10.51 PDF
Vous disposez de fonctions PDF en PHP pour créer des fichiers PDF , pour peu que
vous ayez la bibliothèque PDF de Thomas Merz (disponible à :
http://www.pdflib.com/pdflib/index.html (site anglais)). Vous aurez aussi besoin
des librairies JPEG library;,
the TIFF library, pour compiler cette librairie.
Si vous utilisez pdflib 2.01, vérifiez l'installation de la librairie.
Il ne devrait y avoir qu'un fichier (ou lien) : libPDF.so. La version 2.01
ne fait que créer une librairie appelée libpdf2.01.so, qui ne peut être trouvée
lors du link du programme de test, lors de la configuration. Il vous faudra faire
ce lien vous même, de libPDF.so vers libpdf2.01.so.
Il y a aussi quelques nouveautés avec la version 2.01 de pdflib qui devrait être
couvertes par PHP. Quelques fonctions ne sont plus utilisées (e.g.
pdf_put_image()). Ne soyez pas surpris d'obtenir une alerte...
<?php $fp = fopen("test.pdf", "w"); $info = PDF_get_info(); pdf_set_info_author($info, "Uwe Steinmann"); PDF_set_info_title($info, "Test for PHP wrapper of PDFlib 0.6"); PDF_set_info_author($info, "Name of Author"); pdf_set_info_creator($info, "See Author"); pdf_set_info_subject($info, "Testing"); $pdf = PDF_open($fp, $info); PDF_begin_page($pdf, 595, 842); PDF_add_outline($pdf, "Page 1"); pdf_set_font($pdf, "Times-Roman", 30, 4); pdf_set_text_rendering($pdf, 1); PDF_show_xy($pdf, "Times Roman outlined", 50, 750); pdf_moveto($pdf, 50, 740); pdf_lineto($pdf, 330, 740); pdf_stroke($pdf); PDF_end_page($pdf); PDF_close($pdf); fclose($fp); echo "<A HREF=getPDF.php3>finished</A>"; ?> Le script getPDF.php3 ne fait que produire un fichier PDF. <?php $fp = fopen("test.pdf", "r"); header("Content-type: application/pdf"); fpassthru($fp); fclose($fp); ?> La même chose avec pdflib 2.x ressemble à ce qui suit : Création d'un document PDF avec pdflib 2.x <?php $fp = fopen("test.pdf", "w"); $pdf = PDF_open($fp); pdf_set_info_author($pdf, "Uwe Steinmann"); PDF_set_info_title($pdf, "Test for PHP wrapper of PDFlib 2.0"); PDF_set_info_author($pdf, "Name of Author"); pdf_set_info_creator($pdf, "See Author"); pdf_set_info_subject($pdf, "Testing"); PDF_begin_page($pdf, 595, 842); PDF_add_outline($pdf, "Page 1"); pdf_set_font($pdf, "Times-Roman", 30, 4); pdf_set_text_rendering($pdf, 1); PDF_show_xy($pdf, "Times Roman outlined", 50, 750); pdf_moveto($pdf, 50, 740); pdf_lineto($pdf, 330, 740); pdf_stroke($pdf); PDF_end_page($pdf); PDF_close($pdf); fclose($fp); echo "<A HREF=getPDF.php3>finished</A>"; ?>Ce script est identique à celui ci-dessus. La distribution de pdflib contient d'autres exemples plus élaborés, qui crée des pages plus consistantes. Cet exemple convertit en PHP, et en utilisant pdflib 2.x ressemble à ce qui suit : (Vous pouvez retrouver cet exemple dans la documentation de 10.9 ClibPDF: Exemple pdfclock de la distribution pdflib 2.x <?php $pdffilename = "clock.pdf"; $radius = 200; $margin = 20; $pagecount = 40; $fp = fopen($pdffilename, "w"); $pdf = pdf_open($fp); pdf_set_info_creator($pdf, "pdf_clock.php3"); pdf_set_info_author($pdf, "Uwe Steinmann"); pdf_set_info_title($pdf, "Analog Clock"); while($pagecount-- > 0) { pdf_begin_page($pdf, 2 * ($radius + $margin), 2 * ($radius + $margin)); pdf_set_transition($pdf, 4); /* wipe */ pdf_set_duration($pdf, 0.5); pdf_translate($pdf, $radius + $margin, $radius + $margin); pdf_save($pdf); pdf_setrgbcolor($pdf, 0.0, 0.0, 1.0); /* minutes */ pdf_setlinewidth($pdf, 2.0); for ($alpha = 0; $alpha < 360; $alpha += 6) { pdf_rotate($pdf, 6.0); pdf_moveto($pdf, $radius, 0.0); pdf_lineto($pdf, $radius-$margin/3, 0.0); pdf_stroke($pdf); } pdf_restore($pdf); pdf_save($pdf); /* 5 minutes */ pdf_setlinewidth($pdf, 3.0); for ($alpha = 0; $alpha < 360; $alpha += 30) { pdf_rotate($pdf, 30.0); pdf_moveto($pdf, $radius, 0.0); pdf_lineto($pdf, $radius-$margin, 0.0); pdf_stroke($pdf); } $ltime = getdate(); /* Dessine les heures */ pdf_save($pdf); pdf_rotate($pdf,-(($ltime['minutes']/60.0)+$ltime['hours']-3.0)*30.0); pdf_moveto($pdf, -$radius/10, -$radius/20); pdf_lineto($pdf, $radius/2, 0.0); pdf_lineto($pdf, -$radius/10, $radius/20); pdf_closepath($pdf); pdf_fill($pdf); pdf_restore($pdf); /* draw minute hand */ pdf_save($pdf); pdf_rotate($pdf,-(($ltime['seconds']/60.0)+$ltime['minutes']-15.0)*6.0); pdf_moveto($pdf, -$radius/10, -$radius/20); pdf_lineto($pdf, $radius * 0.8, 0.0); pdf_lineto($pdf, -$radius/10, $radius/20); pdf_closepath($pdf); pdf_fill($pdf); pdf_restore($pdf); /* draw second hand */ pdf_setrgbcolor($pdf, 1.0, 0.0, 0.0); pdf_setlinewidth($pdf, 2); pdf_save($pdf); pdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0)); pdf_moveto($pdf, -$radius/5, 0.0); pdf_lineto($pdf, $radius, 0.0); pdf_stroke($pdf); pdf_restore($pdf); /* draw little circle at center */ pdf_circle($pdf, 0, 0, $radius/30); pdf_fill($pdf); pdf_restore($pdf); pdf_end_page($pdf); } $pdf = pdf_close($pdf); fclose($fp); echo "<A HREF=getPDF.php3?filename=".$pdffilename.">finished</A>"; ?>Le script getPDF.php3 ne fait qu'afficher le fichier PDF.<?php $fp = fopen($filename, "r"); header("Content-type: application/pdf"); fpassthru($fp); fclose($fp); ?>
10.51.1 pdf_set_info
void pdf_set_info (int pdf document, string fieldname, string value) pdf_set_info() écrit un champs dans les entêtes d'informations d'un document PDF. Les valeurs possibles pour fieldname sont 'Subject' (sujet) , 'Title' (titre), 'Creator' (créateur), 'Author' (auteur), 'Keywords' (mots-clé) et les noms définis par l'utilisateur. Cette fonction peut être appelée avant le début de la page. Ecrire les entêtes du document <?php $fd = fopen("test.pdf", "w"); $pdfdoc = pdf_open($fd); pdf_set_info($pdfdoc, "Author", "Uwe Steinmann"); pdf_set_info($pdfdoc, "Creator", "Uwe Steinmann"); pdf_set_info($pdfdoc, "Title", "Test des entêtes"); pdf_set_info($pdfdoc, "Subject", "Test"); pdf_set_info($pdfdoc, "Keywords", "Test, Fields"); pdf_set_info($pdfdoc, "CustomField", "N'importe quoi qui a un sens"); pdf_begin_page($pdfdoc, 595, 842); pdf_end_page($pdfdoc); pdf_close($pdfdoc); ?>
10.51.2 PDF_get_info
info pdf_get_info (string filename)
pdf_get_info() retourne une structure d'information de document
PDF. Cette structure est la structure par défaut. Elle devra être remplie avec
des informations adéquates, telle que l'auteur, le sujet etc....
Note :
Cette fonction n'est pas disponible si pdflib 2.x est activée.
10.51.3 PDF_set_info_creator
void pdf_set_info_creator (info info, string creator)
pdf_set_info_creator() affecte le champs titre de la
structure info d'un document PDF. Cette fonction doit être appelée après
pdf_get_info() et avant pdf_open().
L'appeler après pdf_open() sera sans effet sur le document.
Note :
Cette fonction ne fait pas partie de PDF library.
10.51.4 PDF_set_info_title
void pdf_set_info_title (info info, string title)
pdf_set_info_title() modifie le sujet d'un document PDF.
Cette fonction doit être appelée après pdf_get_info() mais
avant pdf_open(). Si vous l'appelez après
pdf_open(), elle n'aura pas d'effet sur le document.
Note :
Cette fonction ne fait pas partie de PDF library.
10.51.5 PDF_set_info_subject
void pdf_set_info_subject (info info, string subject)
pdf_set_info_subject() modifie le sujet d'un document PDF.
Cette fonction doit être appelée après pdf_get_info() et
avant pdf_open(), sinon, elle sera sans effet.
Note :
Cette fonction ne fait pas partie de PDF library.
10.51.6 PDF_set_info_keywords
void pdf_set_info_keywords (info info, string keywords)
pdf_set_info_subject() affecte le champs mots-clé de la
structure d'un document PDF. Cette fonction doit être appelée après
pdf_get_info() et avant pdf_open(),
sinon, elle sera sans effet.
Note :
Cette fonction ne fait pas partie de PDF library.
10.51.7 PDF_set_info_author
void pdf_set_info_author (info info, string author)
pdf_set_info_author() affecte le champs auteur de la
structure d'un document PDF. Cette fonction doit être appelée après
pdf_get_info() et avant pdf_open(), sinon,
elle sera sans effet.
Note :
Cette fonction ne fait pas partie de PDF library.
10.51.8 PDF_open
int pdf_open (int file, int info)
pdf_open() ouvre un nouveau document PDF. Le fichier
correspondant doit avoir été ouvert avec fopen() et le
pointeur de fichier est passé en argument file.
info est une structure info créée par
pdf_get_info(). Cette structure info sera effacée à partir
de cette fonction.
Note :
Cette fonction ne fait pas partie de PDF library.
10.51.9 PDF_close
void pdf_close (int pdf document)
pdf_close() ferme un document PDF.
Note :
A cause de la programmation buggée de pdflib 0.6 fermer un document PDF ferme
aussi le fichier associé. Cela ne devrait pas être le cas, puisque pdflib n'a
pas ouvert le fichier, mais s'attend à un fichier déjà ouvert, lorsque
pdf_open() est appelée. Par conséquent, il ne devrait pas
fermer le fichier. Afin de résoudre de problème, mettez en commentaire la ligne
190 dans le fichier p_basic.c de pdflib 0.6 jusqu'à ce qu'une nouvelle version
corrige ce bug.
10.51.10 PDF_begin_page
void pdf_begin_page (int pdf document, double height, double width)
pdf_begin_page() commence une nouvelle page avec la
taille height et la largueur
width.
10.51.11 PDF_end_page
void pdf_end_page (int pdf document)
pdf_end_page() termine une page. Une fois qu'une page a été
fermée, elle ne peut pas être modifiée.
10.51.12 PDF_show
void pdf_show (int pdf document, string text)
pdf_show() affiche le texte text
avec la position courante, et avec la police courante.
10.51.13 PDF_show_boxed
void pdf_show_boxed (int pdf document, string text, double x-coor, double y-coor, double width, double height, string mode)
pdf_show_boxed() affiche le texte text
dans un rectangle, dont le coin inférieur gauche est aux coordonnées
(x-coor, y-coor).
Les dimensions du rectangle sont height et
width. Le paramètre mode indique le
type de text. Si width et
height sont à zéro, le mode mode
peut être "left" (gauche), "right" (droite) ou "center"(centré).
width ou height sont différents
peuvant prendre les valeurs de "justify" (justification) ou "fulljustify"
(justification complète).
10.51.14 PDF_show_xy
void pdf_show_xy (int pdf document, string text, double x-coor, double y-coor)
pdf_show_xy() affiche le texte text
à la position donnée par les coordonnées (x-coor,
y-coor).
10.51.15 PDF_set_font
void pdf_set_font (int pdf document, string font name, double size, string encoding, int embed)
pdf_set_font() sélectionne la police, sa taille et son encodage.
Il vous faudra fournir des fichiers Adobe Font Metrics (afm) comme police, dans le
dossier de polices (par défaut ./fonts). Si vous utilisez pdflib 0.6, vous devrez
fournir des fichiers Adobe Font Métric (afm-files) pour les polices, dans le
chemin de police ( par défaut, ./fonts). Si vous utilisez php versin 3 ou une
version plus ancienne que la version 2.20 de pdflib, le quatrième paramètre
encoding peut prendre les valeurs suivantes :
0 = builtin, 1 = pdfdoc, 2 = macroman, 3 = macexpert, 4 = winansi.
Un encodage plus grand que 4 et inférieur à 0 sera transformé en 'winansi'.
'winansi' est souvent un bon choix.
Si vous utilisez PHP version 4 et une version plus ancienne que la version 2.20
de pdflib le quatrième paramètre encoding est une chaîne :
'builtin', 'pdfdoc', 'macroman', 'macexpert', 'winansi'. Si le dernier paramètre
est à 1, la police est intégrée dans le document. Sinon, elle ne le sera pas.
Incorporer une police dans un document est un bonne idée si la police n'est pas
répandue, ou si vous ne pouvez pas vous assurez que le la personne qui regardera
votre document peut accéder à cette police.
10.51.16 PDF_set_leading
void pdf_set_leading (int pdf document, double distance)
pdf_set_leading() permet de choisir la distance entre les
lignes du texte. Cette valeur sera utilisée si du texte est affiché par
pdf_continue_text().
10.51.17 PDF_set_parameter
void pdf_set_parameter (int pdf document, string name, string value)
pdf_set_parameter() fixe certaines valeurs de pdglib.
10.51.18 pdf_get_parameter
string pdf_get_parameter (int pdf document, string name, double modifier)
pdf_get_parameter() lit plusieurs paramètres de la
librairie pdflib, de type chaîne. Le paramètre modifier
définit le paramètre à demander. Si le modifieur modifier
n'est pas nécessaire, il faut passer 0 ou ne pas le passer du tout.
10.51.19 pdf_set_value
void pdf_set_value (int pdf document, string name, double value)
pdf_set_value() écrit différentes valeurs
numériques de la librairie pdflib. 10.51.20 pdf_get_value
double pdf_get_value (int pdf document, string name, double modifier)
pdf_get_value() lit plusieurs valeurs numériques de
la librairie pdflib. Le paramètre modifier
définit le paramètre à demander. Si le modifieur modifier
n'est pas nécessaire, il faut passer 0 ou ne pas le passer du tout.
10.51.21 pdf_get_image_height
string pdf_get_image_height (int pdf document, int image)
pdf_get_image_height() retourne la hauteur d'une
image pdf, en pixel.
10.51.22 pdf_get_image_width
string pdf_get_image_width (int pdf document, int image)
pdf_get_image_width() retourne la largeur d'une
image pdf, en pixel.
10.51.23 PDF_set_text_rendering
void pdf_set_text_rendering (int pdf document, int mode)
pdf_set_text_rendering() determine le rendu du texte. Les
valeurs possibles pour mode sont 0=fill text (texte plein),
1=stroke text (???), 2=fill and stroke text (texte plein et stroke),
3=invisible, 4=texte plein, et ajouté au chemin, 5=stroke text, ajouté au chemin,
6=texte plein et stroke, ajouté au chemin, 7=ajouté au chemin.
10.51.24 PDF_set_horiz_scaling
void pdf_set_horiz_scaling (int pdf document, double scale)
pdf_set_horiz_scaling() fixe l'échelle horizontale du texte,
à scale en pourcentage.
10.51.25 PDF_set_text_rise
void pdf_set_text_rise (int pdf document, double rise)
pdf_set_text_rise() fixe l'élévation du texte à
rise points.
10.51.26 PDF_set_text_matrix
void pdf_set_text_matrix (int pdf document, array matrix)
pdf_set_text_matrix() choisi la matrice de texte : la matrice
de texte determine les transformations de la police courante. La matrice est un
tableau de 6 éléments.
10.51.27 PDF_set_text_pos
void pdf_set_text_pos (int pdf document, double x-coor, double y-coor)
pdf_set_text_pos() choisi la position du texte qui sera
utilisée lors du prochain pdf_show().
10.51.28 PDF_set_char_spacing
void pdf_set_char_spacing (int pdf document, double space)
pdf_set_char_spacing() fixe l'espacement des caractères.
10.51.29 PDF_set_word_spacing
void pdf_set_word_spacing (int pdf document, double space)
pdf_set_word_spacing() fixe l'espacement des mots.
10.51.30 PDF_skew
void pdf_skew (int pdf document, double alpha, double beta)
pdf_skew() modifie le système de coordonnées, en faisant
une rotation d'angle alpha pour les (x) et d'angle
beta pour les (y), en degrés.
alpha et beta ne peuvent pas
pendre les valeurs de 90 ou 270 degrés.
10.51.31 PDF_continue_text
void pdf_continue_text (int pdf document, string text)
pdf_continue_text() affiche le texte
text sur une nouvelle ligne. La distance entre les
lignes peut être choisie avec pdf_set_leading().
10.51.32 PDF_stringwidth
double pdf_stringwidth (int pdf document, string text)
pdf_stringwidth() retourne la largeur du texte
text avec la police courante. Il faut qu'une police ait
été choisie auparavant.
10.51.33 PDF_save
void pdf_save (int pdf document)
pdf_save() enregistre l'environnement courant. Le fonctionnement
est identique à la commande postscript gsave. Très pratique si vous voulez faire
une translation ou une rotation d'un objet, sans affecter les autres.
pdf_save() sera toujours suivi d'un pdf_restore().
10.51.34 PDF_restore
void pdf_restore (int pdf document) pdf_restore() restaure un environnement sauvé par pdf_save(). Cela fonctionne de manière identique à la commande postscript grestore. Très pratique lorsque vous vous faire des translations ou des rotations sans affecter les autres objets. Sauver et Restaurer un environnement <?php PDF_save($pdf); // tout un lot de rotations, translations, transformations... PDF_restore($pdf) ?>
10.51.35 PDF_translate
void pdf_translate (int pdf document, double x-coor, double y-coor) pdf_translate() place l'origine du système de coordonnées au point (x-coor, y-coor). L'exemple suivant trace une ligne de (0, 0) à (200, 200) par rapport aux coordonnées initiales. Il faut aussi désigner le point courant après pdf_translate() et avant de commencer à dessiner les objets. Translation <?php PDF_moveto($pdf, 0, 0); PDF_lineto($pdf, 100, 100); PDF_stroke($pdf); PDF_translate($pdf, 100, 100); PDF_moveto($pdf, 0, 0); PDF_lineto($pdf, 100, 100); PDF_stroke($pdf); ?>
10.51.36 PDF_scale
void pdf_scale (int pdf document, double x-scale, double y-scale) pdf_scale() choisi l'échelle dans les deux directions. L'exemple suivant multiplie l'échelle par 72. La ligne suivante sera dessinée sur un pouce (2.54 cm) de large. Mise à l'échelle <?php PDF_scale($pdf, 72.0, 72.0); PDF_lineto($pdf, 1, 1); PDF_stroke($pdf); ?>
10.51.37 PDF_rotate
void pdf_rotate (int pdf document, double angle)
pdf_rotate() choisi la rotation en degré.
10.51.38 PDF_setflat
void pdf_setflat (int pdf document, double value)
pdf_setflat() choisi la platitude, et lui affecte une valeur
entre 0 et 100.
10.51.39 PDF_setlinejoin
void pdf_setlinejoin (int pdf document, long value)
pdf_setlinejoin() choisi le paramètre "linejoin", et lui
affecte une valeur entre 0 et 2.
10.51.40 PDF_setlinecap
void pdf_setlinecap (int pdf document, int value)
pdf_setlinecap() affecte au paramètre linecap une valeur entre
0 et 2.
10.51.41 PDF_setmiterlimit
void pdf_setmiterlimit (int pdf document, double value)
pdf_setmiterlimit() choisi la "miter limit" et lui affecte
une valeur supérieure à 1.
10.51.42 PDF_setlinewidth
void pdf_setlinewidth (int pdf document, double width)
pdf_setlinewidth() affecte à largeur de ligne la valeur
width.
10.51.43 PDF_setdash
void pdf_setdash (int pdf document, double white, double black)
pdf_setdash() choisi les caractères de remplissage,
et affecte white comme caractère invisible, et
black comme caractère de remplissage. Si les deux sont à
zéros, une ligne continue est affichée.
10.51.44 PDF_moveto
void pdf_moveto (int pdf document, double x-coor, double y-coor)
pdf_moveto() déplace le point courant à la position
(x-coor, y-coor).
10.51.45 PDF_curveto
void pdf_curveto (int pdf document, double x1, double y1, double x2, double y2, double x3, double y3)
pdf_curveto() dessine une courbe de Bezier entre le point
courant et le point (x3, y3) en
utilisant les points de contrôle (x1,
y1) et (x2,
y2).
10.51.46 PDF_lineto
void pdf_lineto (int pdf document, double x-coor, double y-coor)
pdf_lineto() dessine une ligne entre le point courant et le
point de coordonnées (x-coor,
y-coor).
10.51.47 PDF_circle
void pdf_circle (int pdf document, double x-coor, double y-coor, double radius)
pdf_circle() dessine un cercle de centre
(x-coor, y-coor), et de rayon
radius.
10.51.48 PDF_arc
void pdf_arc (int pdf document, double x-coor, double y-coor, double radius, double start, double end)
pdf_arc() dessine un arc de cercle, de centre
(x-coor, y-coor) et de
rayon radius, en commencant à l'angle
start et finissant à l'angle end.
10.51.49 PDF_rect
void pdf_rect (int pdf document, double x-coor, double y-coor, double width, double height)
pdf_rect() dessine un rectangle un rectangle de coin
inférieur gauche de coordonnées
(x-coor, y-coor).
Sa longueur vaut width. Et sa largeur
height.
10.51.50 PDF_closepath
void pdf_closepath (int pdf document)
pdf_closepath() ferme et clos le chemin courant. Cela signifie
qu'une ligne va être ajoutée entre le point courant et le premier point du chemin.
De nombreuses fonctions telles que pdf_moveto(),
pdf_circle() et pdf_rect() démarre un
nouveau chemin.
10.51.51 PDF_stroke
void pdf_stroke (int pdf document)
pdf_stroke() dessine une ligne le long du chemin. Le chemin
courant est la somme de toutes les lignes déssinées. Sans cette fonction, la
ligne de chemin ne sera pas dessinée.
10.51.52 PDF_closepath_stroke
void pdf_closepath_stroke (int pdf document)
pdf_closepath_stroke() est une combinaison de
pdf_closepath() et pdf_stroke().
Elle ferme aussi le chemin.
10.51.53 PDF_fill
void pdf_fill (int pdf document)
pdf_fill() remplis l'intérieur du chemin courant avec la
couleur courante.
10.51.54 PDF_fill_stroke
void pdf_fill_stroke (int pdf document)
pdf_fill_stroke() remplis l'intérieur du chemin courant avec
la couleur courante, puis dessine le chemin courant.
10.51.55 PDF_closepath_fill_stroke
void pdf_closepath_fill_stroke (int pdf document)
pdf_closepath_fill_stroke() clos le chemin, le remplis avec la
couleur courante, et dessine le chemin.
10.51.56 PDF_endpath
void pdf_endpath (int pdf document)
pdf_endpath() ferme le chemin courant mais ne le clos pas.
10.51.57 PDF_clip
void pdf_clip (int pdf document)
pdf_clip() aligne tous les dessins sur le chemin courant.
10.51.58 PDF_setgray_fill
void pdf_setgray_fill (int pdf document, double gray value)
pdf_setgray_fill() choisi la couleur grise comme couleur de
remplissage.
10.51.59 PDF_setgray_stroke
void pdf_setgray_stroke (int pdf document, double gray value)
pdf_setgray_stroke() Fixe la couleur de dessin à un niveau
de gris.
10.51.60 PDF_setgray
void pdf_setgray (int pdf document, double gray value)
pdf_setgray() choisi la couleur grise comme couleur de
remplissage et de dessin.
10.51.61 PDF_setrgbcolor_fill
void pdf_setrgbcolor_fill (int pdf document, double red value, double green value, double blue value)
pdf_setrgbcolor_fill() choisi la couleur rgb comme couleur
de remplissage.
10.51.62 PDF_setrgbcolor_stroke
void pdf_setrgbcolor_stroke (int pdf document, double red value, double green value, double blue value)
pdf_setrgbcolor_stroke() choisi la couleur rgb comme couleur
de remplissage.
10.51.63 PDF_setrgbcolor
void pdf_setrgbcolor (int pdf document, double red value, double green value, double blue value)
pdf_setrgbcolor_stroke() choisi la couleur rgb comme couleur
de remplissage.
10.51.64 PDF_add_outline
int pdf_add_outline (int pdf document, string text, int parent, int open)
pdf_add_outline() ajoute un signet de nom
text sur la page courante, et au point courant.
Le signet est inséré comme un fils de la page parent et
est ouvert par défaut si open n'est pas 0. La valeur
retournée est un identifiant du signet, qui pourra être réutilisé comme parent
d'autres signets. Vous pouvez ainsi créer des hiérarchies de signets.
10.51.65 PDF_set_transition
void pdf_set_transition (int pdf document, int transition) pdf_set_transition() Fixe le mode de transition entre les pages. La valeur de transition peut être :
10.51.66 PDF_set_duration
void pdf_set_duration (int pdf document, double duration)
pdf_set_duration() choisi la durée de transition, en secondes,
entre deux pages.
10.51.67 PDF_open_gif
int pdf_open_gif (int pdf document, string filename) pdf_open_gif() ouvre et charge l'image GIF du fichier filename. Le format doit être GIF. La fonction retourne un identifiant d'image PDF : Inclusion d'un image GIF <?php $im = PDF_open_gif($pdf, "test.gif"); pdf_place_image($pdf, $im, 100, 100, 1); pdf_close_image($pdf, $im); ?>
10.51.68 pdf_open_png
int pdf_open_png (int pdf , string png_file )
pdf_open_png() ouvre une image enregistrée dans
un fichier de nom filename.
Le format de l'image doit être PNG. La fonction retourne un identifiant
d'image PDF.
Note : Cette fonction est obsolète. Il est conseillé d'utiliser
pdf_open_image_file() à la place.
<?php $im = pdf_open_png ($pdf, "test.png"); pdf_place_image ($pdf, $im, 100, 100, 1); pdf_close_image ($pdf, $im); ?>
10.51.69 pdf_open_image_file
int pdf_open_image_file (int PDF-document, string format, string filename) pdf_open_image_file() lit une image de fichier format dans le fichier filename. Les formats possibles sont 'png', 'tiff', 'jpeg' et 'gif'. La fonction retourne un identifiant d'image PDF. Insertion d'une image <?php $pim = pdf_open_image_file($pdf, "png", "image.png"); pdf_place_image($pdf, $pim, 100, 100, 1); pdf_close_image($pdf, $pim); ?>
10.51.70 pdf_open_tiff
int pdf_open_tiff (int PDF-document, string filename)
pdf_open_tiff() ouvre une image enregistrée
dans un fichier de nom filename.
Le format de l'image doit être TIFF. La fonction retourne un identifiant d'image
PDF.
Note : Cette fonction est obsolète. Il est conseillé d'utiliser
pdf_open_image_file() à la place.
10.51.71 PDF_open_memory_image
int pdf_open_memory_image (int pdf document, int image) pdf_open_memory_image() prend comme argument une image créée avec les fonctions PHP, et la rend disponible opur le document PDF. La fonction retourne un identifiant PDF d'image. Inclusion d'une image mémoire <?php $im = ImageCreate(100, 100); $col = ImageColorAllocate($im, 80, 45, 190); ImageFill($im, 10, 10, $col); $pim = PDF_open_memory_image($pdf, $im); ImageDestroy($im); pdf_place_image($pdf, $pim, 100, 100, 1); pdf_close_image($pdf, $pim); ?>
10.51.72 PDF_open_jpeg
int pdf_open_jpeg (int pdf document, string filename)
pdf_open_jpeg() ouvre et charge l'image JPEG du fichier
filename.
Le format de l'image doit être JPEG. La fonction retourne un identifiant d'image
PDF.
10.51.73 PDF_close_image
void pdf_close_image (int image)
pdf_close_image() ferme une image qui a été ouverte par
pdf_open_gif() ou pdf_open_jpeg().
10.51.74 PDF_place_image
void pdf_place_image (int pdf document, int image, double x-coor, double y-coor, double scale)
pdf_place_image() place l'image image
dans la page courante, à la position (x-coor,
x-coor). L'image peut changer d'échelle simultanémement.
10.51.75 PDF_put_image
void pdf_put_image (int pdf document, int image)
pdf_put_image() enregistre une image dans un fichier PDF pour
utilisation ultérieure. L'image n'est pas visible. On peut l'afficher avec la
fonction pdf_execute_image(), et aussi souvent que désiré. Cela
permet d'utiliser plusieurs fois la même image, sans augmenter la taille du
fichier. pdf_put_image() et
pdf_execute_image() est fortement recommandé pour les images
de grande taille (plusieurs ko) si elles sont affichées plus d'une fois dans le
document.
Note :
Cette fonction n'a plus de sens avec la version 2.01 de pdflib. Elle ne fera que
retourner une alerte.
10.51.76 PDF_execute_image
void pdf_execute_image (int pdf document, int image, double x-coor, double y-coor, double scale)
pdf_execute_image() affiche une image qui a été enregistrée
dans le document PDF, avec la fonction pdf_put_image().
L'image est implantée dans la page courante, et aux coordonnées données.
<?php $im = ImageCreate(100, 100); $col1 = ImageColorAllocate($im, 80, 45, 190); ImageFill($im, 10, 10, $col1); $pim = PDF_open_memory_image($pdf, $im); pdf_put_image($pdf, $pim); pdf_execute_image($pdf, $pim, 100, 100, 1); pdf_execute_image($pdf, $pim, 200, 200, 2); pdf_close_image($pdf, $pim); ?>
10.51.77 pdf_add_annotation
void pdf_add_annotation (int pdf document, double llx, double lly, double urx, double ury, string title, string content)
pdf_add_annotation() ajoute une note, dont le coin
inférieur droit est (llx, lly)
et le coin supérieur droit est
(urx, ury).
10.51.78 pdf_set_border_style
void pdf_set_border_style (int pdf document, string style, double width)
pdf_set_border_style() permet de choisir le style et
la largeur du rectangle entourant les liens et annotations.
Le paramètre style peut être 'solid' (trait plain) ou
'dashed' (tirets). 10.51.79 pdf_set_border_color
void pdf_set_border_color (int pdf document, double red, double green, double blue)
pdf_set_border_style() permet de choisir la couleur
du rectangle entourant les liens et annotations. Les trois composants
red, green et
blue doivent prendre des valeurs entre
0.0 et 1.0.
10.51.80 pdf_set_border_dash
void pdf_set_border_dash (int pdf document, double black, double white)
pdf_set_border_dash() permet de choisir la longueur
des tirets noirs et blancs des boîtes entourant les liens et
annotations.
10.52 Fonctions de paiement Verisign
Cette extension vous permet de traiter des transactions financières (cartes
de crédits) avec les services de Verisign Payment Services (feu Signio
: http://www.verisign.com/payment/).
10.52.1 pfpro_init
void pfpro_init
pfpro_init() sert à initialiser la librairie
Payflow Pro. Vous pouvez omettre cet appel. Dans ce cas, l'extension initialisera
automatiquement la librairie, en appelant cette fonction avant la première
transaction.
10.52.2 pfpro_cleanup
void pfpro_cleanup
pfpro_cleanup() sert à terminer une session de
Payflow Pro proprement. Elle doit être appelée après le traitement de la
dernière transaction, et avant la fin du script. Cependant, vous pouvez omettre
de l'appeler, car l'extension le fera automatiquement à la fin du script.
10.52.3 pfpro_process
array pfpro_process (array parameters, string address , int port , int timeout , string proxy address , int proxy port , string proxy logon , string proxy password )
Retourne un tableau associatif avec la réponse.
<?php pfpro_init(); $transaction = array(USER => 'mylogin', PWD => 'mypassword', TRXTYPE => 'S', TENDER => 'C', AMT => 1.50, ACCT => '4111111111111111', EXPDATE => '0904' ); $response = pfpro_process($transaction); if (!$response) { die("Impossible d'établir un lien avec Verisign.\n"); } echo "Le code de réponse Verisign est ".$response[RESULT]; echo ", ce qui signifie : ".$response[RESPMSG]."\n"; echo "\nLa transaction : "; print_r($transaction); echo "\nLa réponse: "; print_r($response); pfpro_cleanup(); ?> 10.52.4 pfpro_process_raw
string pfpro_process_raw (string parameters, string address , int port , int timeout , string proxy address , int proxy port , string proxy logon , string proxy password )
Retourne une chaîne contenant la réponse.
<?php pfpro_init(); $response = pfpro_process("USER=mylogin&PWD[5]=m&ndy&TRXTYPE=S&TENDER=C&AMT=1.50&ACCT=4111111111111111&EXPDATE=0904"); if (!$response) { die("Impossible de se connecter à Verisign.\n"); } echo "La réponse de Verisign était ".$response; pfpro_cleanup(); ?> 10.52.5 pfpro_version
string pfpro_version
pfpro_version() retourne la version de la librairie Payflow Pro
utilisée. Au moment de l'écriture de cette documentation, c'était L211.
10.53 PostgreSQL
Postgres, initialement développé au département de Science informatique, à
UC Berkeley, mis en place la majorité des concepts des bases relationnelles,
actuellement disponibles sur le marché. PostgreSQL accepte le langage SQL92/SQL3,
assure l'intégrité transactionnelle, et l'extension de type.
PostgreSQL est une évolution du code originale de Berkeley : il est Open Source et
dans le domaine public.
Il est possible de se connecter avec la commande suivante : $conn = pg_Connect("host=localhost port=5432 dbname=chris");
Pour utiliser l'interface des grands objets (large object (lo) interface), il est nécessaire de les placer dans un bloc de transaction. Un bloc de transaction commence avec begin et si la transaction se termine avec un
commit et end . Si la transaction échoue, elle
doit être conclue par un abort et rollback .
Utilisation des objets de grande taille (Large Objects)
<?php $database = pg_Connect ("", "", "", "", "jacarta"); pg_exec ($database, "begin"); $oid = pg_locreate ($database); echo ("$oid\n"); $handle = pg_loopen ($database, $oid, "w"); echo ("$handle\n"); pg_lowrite ($handle, "gaga"); pg_loclose ($handle); pg_exec ($database, "commit") pg_exec ($database, "end") ?>
10.53.1 pg_Close
bool pg_close (int connection)
Retourne FALSE si l'index de connexion n'est pas valable, et TRUE sinon.
10.53.2 pg_cmdTuples
int pg_cmdtuples (int result_id) pg_cmdtuples() retourne le nombre de tuples (instances) affectés par les requêtes INSERT, UPDATE, et DELETE. Si aucun tuple n'a été affecté, la fonction retournera 0. pg_cmdtuples <?php $result = pg_exec($conn, "INSERT INTO verlag VALUES ('Autor')"); $cmdtuples = pg_cmdtuples($result); echo $cmdtuples . " <- tuples modifiés."; ?>
10.53.3 pg_Connect
int pg_connect (string host, string port, string options, string tty, string dbname)
Retourne un index de connexion en cas de succès, et FALSE si une connexion
n'a pas pu être établie. Ouvre une connexion avec un serveur PostgreSQL.
Chaque argument doit être placé entre guillemets, y compris le numéro de port.
Les arguments options et tty sont
optionnels et peuvent être ignorés. Cette fonction retourne un index de connexion
qui sera utilisé par d'autres fonctions PostgreSQL. Vous pouvez ouvrir plusieurs
connexions simultanément.
10.53.4 pg_DBname
string pg_dbname (int connection)
Retourne le nom de la base de donnée PostgreSQL associée à l'index de connexion
connection, ou FALSE si connection n'est pas valide.
10.53.5 pg_ErrorMessage
string pg_errormessage (int connection)
Retourne une chaîne contenant le dernier message d'erreur, ou FALSE en cas
d'échec. Il sera impossible d'obtenir des détails sur l'erreur générée, en
utilisant la fonction pg_errormessage() si une erreur est
survenue dans la dernière action pour laquelle une connexion valide existe.
Cette fonction retournera une chaîne contenant le message d'erreur généré par
le serveur final.
10.53.6 pg_Exec
int pg_exec (int connection, string query)
Retourne un index de résultat, si la requête a été correctement exécutée,
et FALSE en cas d'échec, ou si la connexion connection n'était pas un index
de connexion valide. En cas d'erreur, le message d'erreur peut être obtenu
grâce à la fonction pg_errormessage(), si l'index de connexion
était valide. Envoie une requête à un serveur PostgreSQL identifié grâce à
l'index de connexion. La réponse retournée par cette fonction est un index de
résultat qui devra être utilisé pour accéder aux lignes de résultat, grâce à
d'autres fonctions PostgreSQL.
Note :
PHP/FI retournait 1 lorsque la requête n'attendait pas de données en réponse
(insertion, modifcations, par exemple), et retournait un nombre plus grand
que 1, même sur un select qui donnait un ensemble vide. Ce n'est plus le cas.
10.53.7 pg_Fetch_Array
array pg_fetch_array (int result, int row, int result_type )
Retourne un tableau qui contient à la ligne demandée, dans le résultat identifiée
par result, et FALSE, si il ne reste plus de lignes.
<?php $conn = pg_pconnect("","","","","publisher"); if (!$conn) { echo "Erreur de connexion.\n"; exit; } $result = pg_Exec ($conn, "SELECT * FROM authors"); if (!$result) { echo "Erreur durant la requete.\n"; exit; } $arr = pg_fetch_array ($result, 0); echo $arr[0] . " <- array\n"; $arr = pg_fetch_array ($result, 1); echo $arr["author"] . " <- array\n"; ?> 10.53.8 pg_Fetch_Object
object pg_fetch_object (int result, int row, int result_type )
Retourne un objet dont les membres sont les champs de la ligne demandée,
ou FALSE, si il n'y a plus de lignes.
Exemple 1. Postgres retourne un objet <?php $database = "verlag"; $db_conn = pg_connect ("localhost", "5432", "", "", $database); if (!$db_conn): ?> <H1>connexion impossible à la base postgres <? echo $database ?></H1> <? Exit; endif; $qu = pg_exec ($db_conn, "SELECT * FROM verlag ORDER BY autor"); $row = 0; // postgres réclame un compteur de ligne, d'autres bases ne le font pas. while ($data = pg_fetch_object ($qu, $row)): echo $data->autor." ("; echo $data->jahr ."): "; echo $data->titel."<BR>"; $row++; endwhile; ?> <PRE><?php $fields[] = Array ("autor", "Author"); $fields[] = Array ("jahr", " Year"); $fields[] = Array ("titel", " Title"); $row= 0; // postgres réclame un compteur de ligne, d'autres bases ne le font pas. while ($data = pg_fetch_object ($qu, $row)): echo "----------\n"; reset ($fields); while (list (,$item) = each ($fields)): echo $item[1].": ".$data->$item[0]."\n"; endwhile; $row++; endwhile; echo "----------\n"; ?> </PRE> <?php pg_freeResult ($qu); pg_close ($db_conn); ?>
10.53.9 pg_Fetch_Row
array pg_fetch_row (int result, int row)
Retourne un tableau qui contient les données de la ligne demandée,
ou FALSE, si il ne reste plus de lignes.
<?php $conn = pg_pconnect("","","","","publisher"); if (!$conn) { echo "Erreur.\n"; exit; } $result = pg_Exec ($conn, "SELECT * FROM authors"); if (!$result) { echo "Erreur.\n"; exit; } $row = pg_fetch_row ($result, 0); echo $row[0] . " <- row\n"; $row = pg_fetch_row ($result, 1); echo $row[0] . " <- row\n"; $row = pg_fetch_row ($result, 2); echo $row[1] . " <- row\n"; ?>
10.53.10 pg_FieldIsNull
int pg_fieldisnull (int result_id, int row, mixed field)
Teste si un champs est à NULL. Retourne 0 si le champs n'est pas NULL.
Retourne 1 si le champs est à NULL. Le champs peut être identifié avec son
nom ou son index numérique (commencant à 0).
10.53.11 pg_FieldName
string pg_fieldname (int result_id, int field_number)
pg_fieldname() va retourne le nom du champs qui occupe la
colonne numéro field_number dans le résultat
result_id. La numérotation des champs commence à 0.
10.53.12 pg_FieldNum
int pg_fieldnum (int result_id, string field_name)
pg_fieldnum() retourne le numéro de la colonne, dont le nom est
field_name, dans le résultat result_id.
La numérotation des champs commence à 0. Cette fonction retournera -1 en cas
d'erreur.
10.53.13 pg_FieldPrtLen
int pg_fieldprtlen (int result_id, int row_number, string field_name)
pg_fieldprtlen() retourne la taille imprimée (nombre de
caractères) d'une valeur donnée dans un résultat PostgreSQL. La numérotation des
lignes commence à 0. Cette fonction retourne -1 en cas d'erreur.
10.53.14 pg_FieldSize
int pg_fieldsize (int result_id, int field_number)
pg_fieldsize() retourne la taille interne de stockage
d'un champs donné, en octets. Retourne -1 si la taille est variable. Retourne
FALSE en cas d'erreur.
10.53.15 pg_FieldType
int pg_fieldtype (int result_id, int field_number)
pg_fieldtype() retourne une chaîne contenant le type du champs
donné par son index field_number . La numérotation des champs commence à 0.
10.53.16 pg_FreeResult
int pg_freeresult (int result_id)
pg_freeresult() n'est vraiment utile que si vous risquez
d'utiliser trop de mémoire durant votre script. La mémoire occupée par les
résultats est automatiquement libérée à la fin du script. Mais, si vous êtes
sûr de ne pas avoir besoin du résultat ultérieurement, vous pouvez appeler
pg_freeresult() avec l'index de résultat comme argument, et
la mémoire sera libérée.
10.53.17 pg_GetLastOid
int pg_getlastoid (int result_id)
pg_getlastoid() sert à lire l' Oid assigné à un tuple inséré,
si l'index de résultat a été obtenu avec la fonction pg_exec(),
dont la requête était exclusivement SQL INSERT. Cette fonction retourne un entier
positif si un Oid valide a été trouvé. Elle retournera -1 si une erreur est
survenue, ou si la dernière commande n'était pas un INSERT.
10.53.18 pg_Host
string pg_host (int connection_id)
pg_host() retourne le nom d'hôte associé à l'index de
connexion PostgreSQL.
10.53.19 pg_loclose
void pg_loclose (int fd)
pg_loclose() ferme un objet de type Inversion Large Object.
fd est un descripteur de fichier, obtenu avec
pg_loopen().
10.53.20 pg_locreate
int pg_locreate (int conn)
pg_locreate() crée un objet de type Inversion Large Object
et retourne son Oid. conn doit être une connexion valide
avec une base de données PostgreSQL. Les modes d'accès PostgreSQL INV_READ,
INV_WRITE, et INV_ARCHIVE ne sont pas supportés : l'objet peut toujours être
créé, avec des droits d'accès en lecture et écriture. Le mode INV_ARCHIVE a été
supprimé des bases PostgreSQL (version 6.3 et ultérieur).
10.53.21 pg_loexport
bool pg_loexport (int oid , int file , int connection_id )
L'argument oid spécifie l'identifiant d'objet
à exporter et filename est le chemin jusqu'au fichier
de destination. Retourne FALSE si une erreur survient, et TRUE sinon.
N'oubliez par que la manipulation d'objets de grande taille avec PostgreSQL
doit se faire à l'intérieur d'une transaction.
10.53.22 pg_loimport
int pg_loimport (int file , int connection_id )
L'argument filename l'identifiant le chemin
jusqu'au fichier source. Retourne FALSE si une erreur survient, et
un identifiant d'objet de grande taille.
FALSE if an error occurred, object id of the just created large
object otherwise. N'oubliez par que la manipulation d'objets de grande
taille avec PostgreSQL doit se faire à l'intérieur d'une transaction.
10.53.23 pg_loopen
int pg_loopen (int conn, int objoid, string mode)
pg_loopen() ouvre un objet de type Inversion Large Object
et retourne un descripteur de fichier pour cet objet. Le descripteur de fichier
contient les informations de connexion. Ne refermez pas la connexion avant
d'avoir fermé l'objet. objoid est un Oid valide de
Large Object, et mode peut prendre es valeurs suivantes
: "r", "w", ou "rw".
10.53.24 pg_loread
string pg_loread (int fd, int len)
pg_loread() lit au plus len octets
d'un objet de grande taille, et retourne les données sous la forme d'une chaîne.
fd est un identifiant valide d'objet de grande taille, et
len indique la taille maximale de mémoire alloué à l'objet
de grande taille.
10.53.25 pg_loreadall
void pg_loreadall (int fd)
pg_loreadall() lit un objet de grande taille en totalité et le
passe directement au client, après les entêtes adéquats. Cette fonction est prévue
pour transmettre des sons ou des images.
10.53.26 pg_lounlink
void pg_lounlink (int conn, int lobjid)
pg_lounlink() efface l' objet de grande taille dont
l'identifiant est lobjid.
10.53.27 pg_lowrite
int pg_lowrite (int fd, string buf)
pg_lowrite() écrit dans l'objet de grande taille autant de
données possible, issues de la variable buf et
retourne le nombre d'octets réellement écrits, ou FALSE en cas d'erreur.
fd est un descripteut d'objet de grande taille, obtenu avec
pg_loopen().
10.53.28 pg_NumFields
int pg_numfields (int result_id)
pg_numfields() retourne le nombre de champs ou (colonnes) d'un
résultat PostgreSQL. L'argument doit être un identifiant de résultat valide
retourné par pg_exec(). Cette fonction retournera -1 en cas
d'erreur.
10.53.29 pg_NumRows
int pg_numrows (int result_id)
pg_numrows() retourne le nombre de lignes d'un résultat
PostgreSQL. L'argument doit être un identifiant de résultat valide retourné par
pg_exec(). Cette fonction retournera -1 en cas d'erreur.
10.53.30 pg_Options
string pg_options (int connection_id)
pg_options() retourne une chaîne contenant les options de la
connexion PostgreSQL.
10.53.31 pg_pConnect
int pg_pconnect (string host, string port, string options, string tty, string dbname)
Retourne un index de connexion en cas de succès, ou FALSE en cas d'erreur.
Ouvre une connexion permanente à une base PostgreSQL. Chacun des arguments doit
être entre guillemets, y compris le numéro de port. Les arguments
options et tty sont optionnels, et
peuvent être ignorés. Cette fonction retourne un index de connexion, nécessaire aux
autres fonctions PostgreSQL. Vous pouvez établir plusieurs connexion persistantes
en même temps. Voir aussi pg_connect().
10.53.32 pg_Port
int pg_port (int connection_id)
pg_port() retourne le numéro de port de la connexion identifiée
connection_id.
10.53.33 pg_Result
mixed pg_result (int result_id, int row_number, mixed fieldname)
pg_result() retourne les valeurs d'un identifiant de résultat,
produit par pg_exec(). Les arguments
row_number et fieldname précisent
la cellule qui sera retournée. La numérotation des lignes commence à 0. Au lieu
d'utiliser le nom du champs, vous pouvez utiliser son index, sous la forme d'un
nombre sans guillemets. La numérotation des champs commence à 0.
10.53.34 pg_setclientencoding
int pg_setclientencoding (int connection , string encoding)
pg_setclientencoding() fixe l'encodage client
et retourne 0 en cas de succès, ou -1 sinon.
10.53.35 pg_clientencoding
string pg_clientencoding (int connection )
Retourne une chaîne qui indique l'encodage utilisé. Les valeurs possibles
sont :
SQL_ASCII, EUC_JP, EUC_CN, EUC_KR, EUC_TW, UNICODE,
MULE_INTERNAL, LATINX (X=1...9), KOI8, WIN, ALT,
SJIS, BIG5, WIN1250.
10.53.36 pg_trace
bool pg_trace (string filename , string mode , int connection )
Active le suivi des communications entre le frontend et le backend
PostgreSQL, et le redirige vers un fichier. Pour comprendre complètement
les résultats obtenus, vous devez être habitué aux arcanes
du protocole de communication PostgreSQL . Pour ceux qui ne le sont
pas, cette fonction peut toujours être pratique pour traquer les
erreurs dans les requêtes envoyées au serveur. Vous pouvez par exemple
faire une commande 10.53.37 pg_tty
string pg_tty (int connection_id)
pg_tty()retourne le nom de tty de la connexion associée à
connection_id.
10.53.38 pg_untrace
bool pg_untrace (int connection )
Désactive le suivi démarré avec pg_trace().
connection spécifie la connexion qui était
suivie et par défaut, c'est la dernière ouverte.
10.54 POSIX
Ce module contient une interface avec les documents au standard IEEE 1003.1 (POSIX.1),
qui ne sont pas accessibles autrement. Par exemple, POSIX.1 définit les fonctions
open(), read(), write() et close(), qui ont été traditionnellement les fonctions
de PHP3. Certains fonctionnalités spécifiques ne sont pas encore disponibles, bien
que ce module tâche de remédier à cette situation avec ses fonctions.
10.54.1 posix_kill
bool posix_kill (int pid, int sig)
Envoie le signal sig au processus pid.
Retourne FALSE, si il n'a pas pu envoyer le signal, et TRUE sinon.
10.54.2 posix_getpid
int posix_getpid (void )
Retourne l'identifiant du processus courant.
10.54.3 posix_getppid
int posix_getppid (void )
Retourne l'identifiant du processus parent du processus courant.
10.54.4 posix_getuid
int posix_getuid (void )
Retourne l'ID numérique de l'utilisateur du processus courant. Reportez vous à
posix_getpwuid() pour accéder au nom d'utilisateur.
10.54.5 posix_geteuid
int posix_geteuid (void )
Retourne l'UID effectif de l'utilisateur du processus courant.
Reportez vous à posix_getpwuid() pour obtenir le nom
d'utilisateur.
10.54.6 posix_getgid
int posix_getgid (void )
Retourne l'UID du groupe du processus courant. Reportez vous à
posix_getgrgid() pour accéder au nom du groupe.
10.54.7 posix_getegid
int posix_getegid (void )
Retourne l'ID effectif du groupe du processus courant. Reportez vous à
posix_getgrgid() pour transformer cette information en nom
de groupe.
10.54.8 posix_setuid
bool posix_setuid (int uid)
Fixe l'UID effective de l'utilisateur du processus courant. Vous devez
avoir les privilèges nécessaires (traditionnellement ceux du root) sur votre
système pour faire ceci.
10.54.9 posix_setgid
bool posix_setgid (int gid)
Fixe le GID effective du processus courant.
Reportez vous à posix_getgrgid() pour transformer cette
information en nom de groupe. L'ordre approprié est d'abord
posix_setgid(), puis posix_setuid().
10.54.10 posix_getgroups
array posix_getgroups (void )
Retourne un tableau contenant les identifiants du groupe du processus courant.
Reportez vous à posix_getgrgid() pour pouvoir utiliser
ces id.
10.54.11 posix_getlogin
string posix_getlogin (void )
Retourne le nom de login de l'utilisateur qui possède le processus courant.
Reportez vous à posix_getpwnam() pour obtenir plus d'information
sur cet utilisateur.
10.54.12 posix_getpgrp
int posix_getpgrp (void )
Retourne l'identifiant du groupe de processus du processus courant.
Reportez vous à POSIX.1 et à getpgrp(2) dans le manuel de votre système POSIX
pour plus d'informations sur les groupes de processus.
10.54.13 posix_setsid
int posix_setsid (void )
Fait du processus courant un chef de session. Reportez vous à POSIX.1 et
setsid(2) dans le manuel de votre système POSIX pour plus d'informations sur
le contrôle de tâche. Retourne un identifiant de session.
10.54.14 posix_setpgid
int posix_setpgid (int pid, int pgid)
Ajoute le processus pid au groupe
d'id pgid. Reportez vous à POSIX.1 et
setsid(2) dans le manuel de votre système POSIX pour plus d'informations
sur le contrôle de tâche. Retourne TRUE en cas de succès, et FALSE sinon.
10.54.15 posix_getpgid
int posix_getpgid (int pid)
Retourne l'id du groupe de processus pour le processus
pid. 10.54.16 posix_getsid
int posix_getsid (int pid)
Retourne le sid du processus pid.
Si pid est à 0, le sid retourné sera celui du processus
courant.
10.54.17 posix_uname
array posix_uname (void ) Retourne un tableau associatif avec des informations sur le système. Les indices du tableau sont :
10.54.18 posix_times
array posix_times (void ) Retourne un tableau avec les informations sur l'utilisation du CPU. Les indices sont :
10.54.19 posix_ctermid
string posix_ctermid (void )
Encore à faire. 10.54.20 posix_ttyname
string posix_ttyname (int fd)
Encore à faire. 10.54.21 posix_isatty
bool posix_isatty (int fd)
Encore à faire. 10.54.22 posix_getcwd
string posix_getcwd (void )
Encore à faire très rapidement. 10.54.23 posix_mkfifo
bool posix_getcwd (string pathname, int mode)
Encore à faire très rapidement. 10.54.24 posix_getgrnam
array posix_getgrnam (string name)
Encore à faire. 10.54.25 posix_getgrgid
array posix_getgrgid (int gid)
Encore à faire. 10.54.26 posix_getpwnam
array posix_getpwnam (string username)
Retourne un tableau associatif qui contient des informations à propos d'un
utilisateur, identifié par son nom, passé en paramètre
username.
10.54.27 posix_getpwuid
array posix_getpwuid (int uid)
Retourne un tableau associatif contenant des informations sur un utilisateur
repéré par son UID, passé dans le paramètre uid.
10.54.28 posix_getrlimit
array posix_getrlimit (void )
Encore à faire ASAP. 10.55 Pspell
La librairie pspell vous permet de vérifier l'orthographe
d'un mot, et suggérer des corrections.
10.55.1 pspell_add_to_personal
int pspell_add_to_personal (int dictionary_link, string word)
pspell_add_to_personal() ajoute un mot au dictionnaire
personnel. Si vous utilisez pspell_new_config() avec
pspell_config_personal() pour ouvrir le dictionnaire,
vous pourrez sauver le dictionnaire personnel ultérieurement avec
pspell_save_wordlist(). Notez bien que cette fonction
ne fonctionnera pas avec les versions antérieures pspell .11.2 et
aspell .32.5.
$pspell_config = pspell_config_create ("en"); pspell_config_personal ($pspell_config, "/var/dictionaries/custom.pws"); $pspell_link = pspell_new_config ($pspell_config); pspell_add_to_personal ($pspell_link, "Vlad"); pspell_save_wordlist ($pspell_link);
10.55.2 pspell_add_to_session
int pspell_add_to_session (int dictionary_link, string word)
pspell_add_to_session() ajoute un mot au dictionnaire
personnel associé à la version courante. C'est une fonction similaire à
pspell_add_to_personal().
10.55.3 pspell_new
int pspell_new (string language, string spelling , string jargon , string encoding )
pspell_new() ouvre un nouveau dictionnaire et
retourne un identifiant de dictionnaire, pour utiliser avec d'autres
fonctions pspell.
$pspell_link = pspell_new ("english");
10.55.4 pspell_new_config
int pspell_new_config (int config)
pspell_new_config() ouvre un nouveau dictionnaire
et charge les paramètrages spécifié dans la configuration config,
créée avec pspell_config_create() et modifiée avec
les fonctions pspell_config_*. Cette méthode vous donne le
maximum de flexibilité, et dispose de toutes les fonctionnalités fournies par
pspell_new() et pspell_new_personal().
$pspell_config = pspell_config_create ("en"); pspell_config_personal ($pspell_config, "/var/dictionaries/custom.pws"); pspell_config_repl ($pspell_config, "/var/dictionaries/custom.repl"); $pspell_link = pspell_new_personal (pspell_config);
10.55.5 pspell_new_personal
int pspell_new_personal (string personal, string language, string spelling , string jargon , string encoding , int mode )
pspell_new_personal() charge un nouveau dictionnaire
avec un dictionnaire personnel, et retourne un identifiant de dictionnaire
utilisé par d'autres fonctions pspells. Le dictionnaire peut être modifiée
et sauvé avec pspell_save_wordlist(). Cependant,
les paires de remplacement ne seront pas sauvées. Pour ce faire, vous devez
créer une configuration qui utilise pspell_config_create(),
et choisir le fichier de destination du dictionnaire personnel avec
pspell_config_personal(), choisir le fichier de paire
de remplacement avec pspell_config_repl(), et ouvrir un
nouveau dictionnaire avec pspell_new_config().
$pspell_link = pspell_new_personal ("/var/dictionaries/custom.pws", "en", "", "", "", PSPELL_FAST|PSPELL_RUN_TOGETHER));
10.55.6 pspell_save_wordlist
int pspell_save_wordlist (int dictionary_link)
pspell_save_wordlist() sauve le dictionnaire personnel de
la session courante. Le dictionnaire doit avoir été ouvert avec
pspell_new_personal(), et la localisation des fichiers
doit avoir été spécifié avec pspell_config_personal() et
(éventuellement) pspell_config_repl(). Notez que cette
fonction n'est pas disponible avec les versions antérieures à pspell .11.2 et
aspell .32.5.
$pspell_config = pspell_config_create ("en"); pspell_config_personal ($pspell_config, "/tmp/dicts/newdict"); $pspell_link = pspell_new_config ($pspell_config); pspell_add_to_personal ($pspell_link, "Vlad"); pspell_save_wordlist ($pspell_link);
10.55.7 pspell_store_replacement
int pspell_store_replacement (int dictionary_link, string misspelled, string correct)
pspell_store_replacement() enregistre une paire de
remplacement pour un mot de façon à ce que cette suggestion soit retournée par
pspell_suggest() plus tard. Pour pouvoir utiliser
cette fonction, vous devez utiliser pspell_new_personal()
pour ouvrir le dictionnaire. Pour pouvoir sauver tout le temps les paires
de remplacement, vous devez utiliser pspell_config_personal()
et pspell_config_repl() pour indiquer le lieu de
sauvegarde des dictionnaires personnels, et
pspell_save_wordlist() pour enregistrer les modifications
sur le disque. Ce fichier devra donc être accessible en écriture par PHP.
Notez que cette fonction ne fonctionne pas avec les versions antérieures à
pspell .11.2 et aspell .32.5.
$pspell_config = pspell_config_create ("en"); pspell_config_personal ($pspell_config, "/var/dictionaries/custom.pws"); pspell_config_repl ($pspell_config, "/var/dictionaries/custom.repl"); $pspell_link = pspell_new_config ($pspell_config); pspell_store_replacement ($pspell_link, $misspelled, $correct); pspell_save_wordlist ($pspell_link);
10.55.8 pspell_mode
boolean pspell_mode (int dictionary_link, int mode)
pspell_mode() change le mode d'orthographe.
$pspell_link = pspell_new ("english"); pspell_mode (PSPELL_FAST); if (!pspell_check ($pspell_link, "testt")) { $suggestions = pspell_suggest ($pspell_link, "testt"); }
10.55.9 pspell_runtogether
boolean pspell_runtogether (int dictionary_link, int mode)
pspell_runtogether() considèegrave;re que les mots accolés
sont des mots composés. Par exemple, "lechat" devient un composé valide,
bien que l'espace entre les deux mots manque. Changer ce paramétrage
ne modifie que les résultats retournés par pspell_check();
pspell_suggest() retournera toujours des suggestions
qui ne seront pas modifiées par l'appel de pspell_runtogether().
$pspell_link = pspell_new ("english"); pspell_runtogether (true); echo pspell_runtogether ($pspell_link, "thecat") ? "correct" : "faux";
10.55.10 pspell_check
boolean pspell_check (int dictionary_link, string word)
pspell_check() vérifie l'orthographe d'un mot
et retourne true si l'orthographe est correcte, false sinon.
$pspell_link = pspell_new ("english"); if (pspell_check ($pspell_link, "testt")) { echo "This is a valid spelling"; } else { echo "Désolé, mauvaise orthographe"; }
10.55.11 pspell_clear_session
int pspell_clear_session (int dictionary_link)
pspell_clear_session() remet à zéro la session courante.
Le dictionnaire personnel est vidé, et par exemple si vous tentez de l'enregistrer
avec pspell_save_wordlist(), rien ne se passera.
$pspell_config = pspell_config_create ("en"); pspell_config_personal ($pspell_config, "/var/dictionaries/custom.pws"); $pspell_link = pspell_new_config ($pspell_config); pspell_add_to_personal ($pspell_link, "Vlad"); pspell_clear_session ($pspell_link); pspell_save_wordlist ($pspell_link); //"Vlad" ne sera pas sauvé
10.55.12 pspell_config_create
int pspell_config_create (string language, string spelling , string jargon , string encoding )
pspell_config_create() a une syntaxe similaire à
pspell_new(). En fait, utiliser pspell_config_create()
suivi immédiatement par pspell_new_config()
produira exactement le même résultat. Cependant, après avoir créer une nouvelle
configuration, vous pouvez aussi utiliser les fonctions pspell_config_*
avant d'appeler pspell_new_config() pour tirer profit des
fonctionnalités avancées.
$pspell_config = pspell_config_create ("en"); pspell_config_personal ($pspell_config, "/var/dictionaries/custom.pws"); pspell_config_repl ($pspell_config, "/var/dictionaries/custom.repl"); $pspell_link = pspell_new_personal (pspell_config);
10.55.13 pspell_config_ignore
int pspell_config_ignore (int dictionary_link, int n)
pspell_config_ignore() doit être utilisé avec une
configuration avec d'appeler pspell_new_config().
Cette fonction permet au vérificateur d'ignorer les mots trop courts.
$pspell_config = pspell_config_create ("en"); pspell_config_ignore($pspell_config, 5); $pspell_link = pspell_new_config($pspell_config); pspell_check($pspell_link, "abcd"); // Ce mot ne provoquera pas d'erreur
10.55.14 pspell_config_mode
int pspell_config_mode (int dictionary_link, int mode)
pspell_config_mode() should be used on a config
before calling pspell_new_config(). This function
determines how many suggestions will be returned by
pspell_suggest().
$pspell_config = pspell_config_create ("en"); pspell_config_mode($pspell_config, PSPELL_FAST); $pspell_link = pspell_new_config($pspell_config); pspell_check($pspell_link, "thecat");
10.55.15 pspell_config_personal
int pspell_config_personal (int dictionary_link, string file)
pspell_config_personal() doit être appelé dans une
configuration avant d'appeler pspell_new_config().
Le dictionnaire personnel sera chargé est utilisé en plus du dictionnaire
standard, une fois que vous aurez appelé pspell_new_config().
Si le fichier n'existe pas, il sera créé. Ce fichier sera aussi le fichier
où pspell_save_wordlist() sauvera le dictionnaire
personnel. Ce fichier devra donc être accessible en écriture par PHP.
Notez que cette fonction ne fonctionne pas avec les versions antérieures à
pspell .11.2 et aspell .32.5.
$pspell_config = pspell_config_create ("en"); pspell_config_personal ($pspell_config, "/var/dictionaries/custom.pws"); $pspell_link = pspell_new_config ($pspell_config); pspell_check ($pspell_link, "thecat");
10.55.16 pspell_config_repl
int pspell_config_repl (int dictionary_link, string file)
pspell_config_repl() doit être appelé dans une
configuration avant d'appeler pspell_new_config().
Les paires de remplacement améliorent la qualité du vérificateur. Lorsqu'un
mot est mal orthographié et qu'aucune suggestion valable n'est trouvée
dans le dictionnaire, pspell_store_replacement() sera
utilisé pour enregistrer une paire de remplacement et
pspell_save_wordlist() pour sauver le dictionnaire avec
les paires de remplacement. Ce fichier devra donc être accessible en
écriture par PHP. Notez que cette fonction ne fonctionne pas avec les
versions antérieures à pspell .11.2 et aspell .32.5.
$pspell_config = pspell_config_create ("en"); pspell_config_personal ($pspell_config, "/var/dictionaries/custom.pws"); pspell_config_repl ($pspell_config, "/var/dictionaries/custom.repl"); $pspell_link = pspell_new_config ($pspell_config); pspell_check ($pspell_link, "thecat");
10.55.17 pspell_config_runtogether
int pspell_config_runtogether (int dictionary_link, boolean flag)
pspell_config_runtogether() doit être appelé dans une
configuration avant d'appeler pspell_new_config().
Cette fonction indique si deux mots accolés doivent être traités comme
un composé valide, même si il devrait y avoir un espace entre ces deux mots.
Modifier cette configuration n'affecte que les résultats retournés par
pspell_check(); pspell_suggest()
retournera toujours des suggestions.
$pspell_config = pspell_config_create ("en"); pspell_config_runtogether ($pspell_config, true); $pspell_link = pspell_new_config ($pspell_config); pspell_check ($pspell_link, "thecat");
10.55.18 pspell_config_save_repl
int pspell_config_save_repl (int dictionary_link, boolean flag)
pspell_config_save_repl() doit être appelé dans une
configuration avant d'appeler pspell_new_config().
Elle détermine si pspell_save_wordlist() doit sauver
les paires de remplacement avec le dictionnaire. Généralement, il n'y a pas
besoin d'utiliser cette fonction car si pspell_config_repl()
est utilisée, les paires de remplacement seront sauvées de toutes façons, et
si ce n'est pas le cas, elles ne seront pas sauvées. Ce fichier devra donc être
accessible en écriture par PHP. Notez que cette fonction ne fonctionne pas avec
les versions antérieures à pspell .11.2 et aspell .32.5.
10.55.19 pspell_suggest
array pspell_suggest (int dictionary_link, string word)
pspell_suggest() retourne un tableau de suggestions
pour le mot word.
$pspell_link = pspell_new ("english"); if (!pspell_check ($pspell_link, "testt")){ $suggestions = pspell_suggest ($pspell_link, "testt"); for ($i=0; $i < count ($suggestions); $i++) { echo "Orthographes suggerées : " . $suggestions[$i] . "<br>"; } }
10.56 GNU Readline
Les fonctions readline() implémente une interface vers la
librairie GNU Readline. Ce sont des fonctions qui fournissent des lignes de
commandes éditables. C'est à dire qu'il simule le même comportement que
Bash, lorsqu'il vous permet d'utiliser les touches de flèches pour insérer des
caractères ou de lister l'historique des commandes. A cause de la nature interactive
de cette librairie, elle est de peu d'utilité pour écrire des applications web,
mais peut être utile pour écrire des scripts qui seront éxécutées depuis un shell.
10.56.1 readline
string readline (string prompt )
Cette fonction retourne une chaîne entrée par l'utilisateur. Vous pouvez
spécifier une chaîne qui servira de ligne de commande à l'utilisateur. La
ligne retournée est débarassée du caractère de nouvelle ligne final. Vous devez
l'ajouter vous même à l'historique, si vous souhaitez utiliser
readline_add_history().
//Lit 3 commandes de l'utilisateur. for ($i=0; $i < 3; $i++) { $line = readline ("Commande: "); readline_add_history ($line); } //affiche l'historique print_r (readline_list_history()); //affiche les variables print_r (readline_info()); 10.56.2 readline_add_history
void readline_add_history (string line)
Cette fonction ajoute une ligne à l'historique de commandes.
10.56.3 readline_clear_history
boolean readline_clear_history (void )
Cette fonction efface tout l'historique.
10.56.4 readline_completion_function
boolean readline_completion_function (string line)
Cette fonction enregistre une fonction de complétion. Vous devez fournir le
nom d'une fonction qui accepte une ligne de commande partielle, et qui retourne
un tableau contenant les suggestions. C'est le même type de fonctionnalité que
lorsque vous utilisez la touche de tabulation sous Bash.
10.56.5 readline_info
mixed readline_info (string varname , string newvalue )
Appelée sans paramètre, cette fonction retourne un tableau de valeurs, qui
sont les paramètres de configuration de la librairie. les éléments sont indexés
par les valeurs suivantes : done, end, erase_empty_line,
library_version, line_buffer, mark, pending_input, point, prompt,
readline_name, et terminal_name.
10.56.6 readline_list_history
array readline_list_history (void )
Cette fonction retourne un tableau avec l'historique des commandes
complètes. Les éléments sont indexés numériquement, en commencant à zéro.
10.56.7 readline_read_history
boolean readline_read_history (string filename)
Cette fonction lit l'historique depuis un fichier.
10.56.8 readline_write_history
boolean readline_write_history (string filename)
Cette fonction écrit l'historique dans un fichier.
10.57 Fonction GNU Recode
Ce module contient l'interface à la librairie GNU Recode library, version 3.5.
Pour pouvoir utiliser ces fonctions, il faut que PHP ait été compilé avec l'option
--with-recode. Pour cela, il faut que vous ayez la librairie GNU Recode 3.5
ou plus récent, installée sur votre système.
10.57.1 recode_string
string recode_string (string request, string string)
Recode la chaîne string en fonction de la requête
request. Retourne FALSE, en cas d'échec, et TRUE sinon.
10.57.2 recode_file
bool recode_file (int input, int output)
Recode le fichier identifié par input
dans le fichier identifié par output
en fonction de la requête de recodage request.
Retourne FALSE, en cas d'échec, et TRUE sinon. 10.58 Expressions régulières
Les expressions régulières sont utilisées pour effectuer des manipulations complexes de chaînes de caractères. Les fonctions sont :
Ces fonctions requièrent toutes une expression régulière comme premier argument.
PHP utilise les expressions régulières avancées de POSIX (POSIX 1003.2).
Pour avoir tous les détails sur ces expressions, reportez vous aux pages de
manuel inclues dans le répertoire de la distribution PHP.
ereg("abc",$string); /* Retourne TRUE si "abc" est trouvé quelque part dans la chaîne $string. */ ereg("^abc",$string); /* Retourne TRUE si "abc" est trouvé au début de la chaîne $string. */ ereg("abc$",$string); /* Retourne TRUE si "abc" est trouvé à la fin de la chaîne $string. */ eregi("(ozilla.[23]|MSIE.3)",$HTTP_USER_AGENT); /* Retourne TRUE si le client est Netscape 2, 3 ou MSIE 3. */ ereg("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string,$regs); /* Introduit trois mots séparés par des espaces dans les chaînes $regs[1], $regs[2] et $regs[3]. */ $string = ereg_replace("^","<BR>",$string); /* Insère une balise <BR> au début de la chaîne $string. */ $string = ereg_replace("$","<BR>",$string); /* Insère une balise <BR> à la fin de la chaîne $string. */ $string = ereg_replace("\n","",$string); /* Supprime toutes les nouvelles lignes de $string. */
10.58.1 ereg
int ereg (string pattern, string string, array regs)
Recherche dans la chaîne string les séquences de
caractères qui correspondent au masque pattern.
if ( ereg( "([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs ) ) { echo "$regs[3].$regs[2].$regs[1]"; } else { echo "Format de date invalide : $date"; }
10.58.2 ereg_replace
string ereg_replace (string pattern, string replacement, string string)
Cette fonction effectue une recherche par expression régulière dans la chaîne
string en recherchant les occurrences de
pattern, puis les remplace par la chaîne
replacement.
$string = "Ceci est un test"; echo ereg_replace( " est", " etait", $string ); echo ereg_replace( "( )est ", "\\1etait", $string ); echo ereg_replace( "(( )est)", "\\2etait", $string );
10.58.3 eregi
int eregi (string pattern, string string, array regs)
Cette fonction est identique à ereg(), hormis le fait qu'elle
ignore la casse des caractères lors de la recherche sur les caractères alphabétiques.
10.58.4 eregi_replace
string eregi_replace (string pattern, string replacement, string string)
Cette fonction est identique à ereg_replace(), hormis le fait
qu'elle ne tient pas compte de la casse des caractères alphabétiques.
10.58.5 split
array split (string pattern, string string, int limit)
Retourne une tableau de chaînes : chacune d'entre elle est une sous-chaîne de
string délimitée par les occurrences trouvées de
l'expression régulière pattern. Si une erreur survient,
retourne FALSE.
$passwd_list = split( ":", $passwd_line, 5 );
$date = "04/30/1973"; // Les délimiteurs peuvent être des /, des points ou des tirets list( $month, $day, $year ) = split( '[/.-]', $date ); echo "Mois: $month; Jour: $day; Annee: $year<br>\n";
10.58.6 sql_regcase
string sql_regcase (string string) Retourne une expression régulière valide qui acceptera la chaîne string, et toutes les variantes majuscule/minuscule possibles de cette chaîne. Cette expression sera construite à partir de la chaîne string en remplacant tous les caractères par des expressions entre crochets (des classes de caractères), contenant la lettre majuscule et minuscule. Si le caractère n'est pas une lettre, les crochets contiendront deux fois le caractère original. Exemple avec sql_regcase() echo sql_regcase( "Foo bar" );
affichera @example
[Ff][Oo][Oo][ ][Bb][Aa][Rr]
. 10.59 Satellite CORBA
L'extension Satellite sert à accéder aux objets CORBA. Vous aurez besoin de
configurer l'option idl_directory= dans le fichier `php.ini'
en y indiquant l'endroit où vous stockez vos fichiers IDL.
10.59.1 OrbitObject
new @xref{function.orbitobject , , orbitobject (string ior) }
Cette classe fournit l'accès aux objets CORBA. Le paramètre
ior doit être une chaîne contenant l'IOR
(Interoperable Object Reference) qui identifie l'objet distant.
interface MonInterface { void SetInfo (string info); string GetInfo(); attribute int value; }
<?php $obj = new OrbitObject ($ior); $obj->SetInfo ("Un super objet"); echo $obj->GetInfo(); $obj->value = 42; echo $obj->value; ?>
10.59.2 OrbitEnum
new @xref{function.orbitenum , , orbitenum (string id) }
Cette classe représente une énumération identifiée par
id. id peut être le nom
de l'énumération (i.e. "MonEnum"), ou l'id du repository
(e.g. "IDL:MyEnum:1.0").
enum MonEnum { a,b,c,d,e };
<?php $enum = new OrbitEnum ("MonEnum"); echo $enum->a; /* écrit 0 */ echo $enum->c; /* écrit 2 */ echo $enum->e; /* écrit 4 */ ?>
10.59.3 OrbitStruct
new @xref{function.orbitstruct , , orbitstruct (string id) }
Cette classe représente une structure identifiée par
id. id peut être le nom
de l'énumération (i.e. "MonEnum"), ou l'id du repository
(e.g. "IDL:MyEnum:1.0").
struct MaStruct { short shortvalue; string stringvalue; }; interface SomeInterface { void SetValues (MaStruct values); MaStruct GetValues(); }
<?php $obj = new OrbitObject ($ior); $initial_values = new OrbitStruct ("IDL:MaStruct:1.0"); $initial_values->shortvalue = 42; $initial_values->stringvalue = "HGTTG"; $obj->SetValues ($initial_values); $values = $obj->GetValues(); echo $values->shortvalue; echo $values->stringvalue; ?>
10.59.4 satellite_caught_exception
bool satellite_caught_exception ,
Cette fonction retourne true si la dernière exception a été traitée.
/* ++?????++ Grossière erreur. recommence au début */ exception OutOfCheeseError { int parameter; } interface AnotherInterface { void DemandePourquoi() raises (OutOfCheeseError); }
<?php $obj = new OrbitObject ($ior); $obj->AskWhy(); if (satellite_caught_exception()) { if ("IDL:OutOfCheeseError:1.0" == satellite_exception_id()) { $exception = satellite_exception_value(); echo $exception->parameter; } } ?>
10.59.5 satellite_exception_id
string satellite_exception_id ,
Retourne l'id du repository qui a généré la dernière exception.
Pour une illustration, voir satellite_caught_exception().
10.59.6 satellite_exception_value
OrbitStruct satellite_exception_value ,
Retourne la structure de la dernière exception.
Pour une illustration, voir satellite_caught_exception().
10.60 Sémaphores et gestion de la mémoire partagée
Ce module fourni un système de sémaphore. Ce système utilise les sémaphores System V.
les sémaphores peuvent être utilisés pour fournir un accès exclusif à certaines
ressources de la machine, ou pour limiter le nombre de processus qui utilisent en
même temps une ressource.
10.60.1 sem_get
int sem_get (int key, int max_acquire , int perm )
Retourne un identifiant positif de sémaphore en cas de succès, et FALSE en cas
d'erreur.
10.60.2 sem_acquire
int sem_acquire (int sem_identifier)
Retourne TRUE en cas de succès, et FALSE sinon.
10.60.3 sem_release
int sem_release (int sem_identifier)
Retourne TRUE en cas de succès, FALSE en cas d'erreur.
10.60.4 shm_attach
int shm_attach (int key, int memsize, int perm)
shm_attach() retourne un identifiant qui permettra d'accéder
au System V de mémoire partagée. Au premier appel, la mémoire sera créée, avec la
taille mem_size (par défaut: sysvshm.init_mem dans php3.ini, sinon 10000 octets)
et avec les permissions perm(par défaut : 666).
10.60.5 shm_detach
int shm_detach (int )
shm_detach() relâche le segment de mémoire partagée identifié
par shm_identifier et créé par
sem_get().
N'oubliez pas que cette mémoire partagée existe toujours sous Unix, et que les
données sont toujours accessibles.
10.60.6 shm_remove
int shm_remove (int shm_identifier)
Supprime un segment de mémoire partagée sous Unix. Toutes les données seront
supprimées.
10.60.7 shm_put_var
int shm_put_var (int shm_identifier, int variable_key, mixed variable)
Insère ou modifie la variable variable avec la clé
variable_key. Tous les types de variables (double, int,
string, array) sont supportés.
10.60.8 shm_get_var
mixed shm_get_var (int id, int variable_key)
shm_get_var() retourne la variable repérée par
variable_key. La variable est toujours présente en mémoire
partagée.
10.60.9 shm_remove_var
int shm_remove_var (int id, int variable_key)
shm_remove_var() efface la variable
variable_key de la mémoire partagée et libère la mémoire.
10.61 Sessions
La gestion des sessions avec PHP est un moyen de sauver des informations entre
deux accès. Cela permet notamment de construire des applications personnalisées,
et d'accroître l'attrait de votre site.
<?php session_register("compteur"); $count++; ?> Salut visiteur, vous avez vu cette page <? echo $compteur; ?> fois.<p> <php? # le <?=SID?> est nécessaire pour transmettre l'identifiant de session # au cas oú les utilisateurs auraient inactivé les cookies ?> Pour continuer, <A HREF="nextpage.php?<?=SID?>">clique ici</A>
<?php function open ($save_path, $session_name) { echo "ouvre ($save_path, $session_name)\n"; return true; } function close() { echo "ferme\n"; return true; } function read ($key) { echo "écriture ($key, $val)\n"; return "foo|i:1;"; } function write ($key, $val) { echo "écriture ($key, $val)\n"; return true; } function destroy ($key) { return true; } function gc ($maxlifetime) { return true; } session_set_save_handler ("open", "close", "read", "write", "destroy", "gc"); session_start(); $foo++; ?>
$ ./php save_handler.php Content-Type: text/html Set-cookie: PHPSESSID=f08b925af0ecb52bdd2de97d95cdbe6b open (/tmp, PHPSESSID) read (f08b925af0ecb52bdd2de97d95cdbe6b) write (f08b925af0ecb52bdd2de97d95cdbe6b, foo|i:2;) close
Note :
La gestion des sessions a été ajoutée dans PHP 4.0.
10.61.1 session_start
bool session_start
session_start() crée une session (ou continue la session
courante, en fonction de l'identifiant de session passé par une variable GET
ou par un cookie)
10.61.2 session_destroy
bool session_destroy
session_destroy() détruit toutes les données associées
à la session courante.
10.61.3 session_name
string session_name (string name )
session_name()retourne le nom de la session courante.
Si name est fourni, le nom de la session changera, et
prendra la valeur fournie.
<?php # Change le nom de la session à WebsiteID $previous_name = session_name ("WebsiteID"); echo "L'ancien nom de la session était $previous_name<p>"; ?>
Note :
Cette fonction a été ajoutée dans PHP 4.0.
10.61.4 session_module_name
string session_module_name (string module )
session_module_name() affecte et/ou retourne le module courant
de session courante. Si module est fourni, ce module sera
utilisé à la place du courant.
Note :
Cette fonction a été ajoutée dans PHP 4.0.
10.61.5 session_save_path
string session_save_path (string path )
session_save_path() retourne le chemin du dossier utilisé pour
enregistrer les données de sessions. Si path est fourni,
le chemin prendra alors la valeur fournie.
Note :
Sur certains systèmes d'exploitation, il vous faudra peut être fournir un chemin
vers un système de sauvegarde qui peut gérer de grandes quantités de petits
fichiers efficacement : par exemple, sous Linux, reiserfs peut être plus efficace
que ext2fs.
10.61.6 session_id
string session_id (string id)
session_id() retourne l'identifiant de session courante. Si
id est fourni, il remplacera l'identifiant courant de la
session.
10.61.7 session_register
bool session_register (mixed name, mixed ...)
session_register() enregistre une variable avec le nom name dans la session courante.
10.61.8 session_unregister
bool session_unregister (string name)
session_unregister() supprime la variable nommée name dans la session courante .
10.61.9 session_unset
void session_unset
session_unset() libère toutes les variables de la
session.
10.61.10 session_is_registered
bool session_is_registered (string name)
session_is_registered() retourne true si il y a une variable
du nom de name enregistrée dans la session courante.
Note :
Cette fonction a été ajoutée dans PHP 4.0.
10.61.11 session_get_cookie_params
array session_get_cookie_params session_get_cookie_params() retourne un tableau avec les informations du cookie de session courante. Le tableau contient les éléments suivants :
10.61.12 session_set_cookie_params
void session_set_cookie_params ( int lifetime , string path , string domain )
Ecrit les paramètres du cookie définis dans le fichier php.ini.
L'effet de cette fonction ne dure que le temps du script.
10.61.13 session_decode
bool session_decode (string data)
session_decode() décode les données de session à partir de la
chaîne data, et affecte les valeurs des variables de
session.
Note :
Cette fonction a été ajoutée dans PHP 4.0.
10.61.14 session_encode
bool session_encode
session_encode() retourne les données de session dans une
chaîne.
Note :
Cette fonction a été ajoutée dans PHP 4.0.
10.61.15 session_set_save_handler
void session_set_save_handler (string open, string close, string read, string write, string destroy, string gc)
session_set_save_handler() fixe les fonctions
de stockage personnalisées qui sont utilisées pour stocker et
chargeer les données associées à une session. Ces fonctions sont
utiles lorsque la méthode de stockage standard de PHP n'est pas
adaptée. On peut ainsi stocker les données dans une base de données.
<?php function open ($save_path, $session_name) { global $sess_save_path, $sess_session_name; $sess_save_path = $save_path; $sess_session_name = $session_name; return(true); } function close() { return(true); } function read ($id) { global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id"; if ($fp = @fopen($sess_file, "r")) { $sess_data = fread($fp, filesize($sess_file)); return($sess_data); } else { return(""); } } function write ($id, $sess_data) { global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id"; if ($fp = @fopen($sess_file, "w")) { return(fwrite($fp, $sess_data)); } else { return(false); } } function destroy ($id) { global $sess_save_path, $sess_session_name; $sess_file = "$sess_save_path/sess_$id"; return(@unlink($sess_file)); } /********************************************* * ATTENTION - Vous devez implémenter une * * fonction de nettoyage routinier ici!! * *********************************************/ function gc ($maxlifetime) { return true; } session_set_save_handler ("open", "close", "read", "write", "destroy", "gc"); session_start(); // Utilisation habituelle des sessions ?>
10.61.16 session_cache_limiter
string session_cache_limiter (string cache_limiter )
session_cache_limiter() retourne le nom du limiteur
de cache courant. Si cache_limiter est spécifié,
le nom du limiteur de cache est alors remplacé par cette nouvelle valeur.
<?php # Choisir le mode 'private' du limiteur de cache. session_cache_limiter('private); $cache_limiter = session_cache_limiter(); echo "Le limiteur de cache vaut maintenant $cache_limiter<p>"; ?>
Note :
Cette fonction a été ajoutée dans PHP 4.0.3.
10.62 Mémoire partagée
Shmop est un ensemble de fonctions simples pour gérer la mémoire
partagée avec PHP (lecture, écriture, création et suppressions de
segments de mémoire paragée UNIX). Ces fonctions ne fonctionnent pas
sous Windows, car ce système d'exploitation ne supporte pas la mémoire
partagée. Pour utiliser les fonctions shmop, compilez PHP avec l'option
--enable-shmop parameter.
<?php // Crée 100 octets de mémoire partagée avec un identifiant système "0xff3" $shm_id = shm_open(0xff3, "c", 0644, 100); if(!$shm_id) { echo "Impossible de créer la mémoire partagée\n"; } // Lire la taille de la mémoire partagée $shm_size = shm_size($shm_id); echo "Un bloc de SHM de taille ".$shm_size. " a été créé.\n"; // Ecriture d'une chaîne de test dans ce segment $shm_bytes_written = shm_write($shm_id, "mon bloc de mémoire partagée", 0); if($shm_bytes_written != strlen("mon bloc de mémoire partagée")) { echo "Impossible d'écrire toutes les données en mémoire\n"; } // Lecture du segment $my_string = shm_read($shm_id, 0, $shm_size); if(!$my_string) { echo "Impossible de lire toutes les données en mémoire\n"; } echo "Les données mis en mémoire partagées sont : ".$my_string."\n"; //Maintenant, effacons le bloc, et fermons le segment de mémoire if(!shm_delete($shm_id)) { echo "Impossible d'effacer le segment de mémoire"; } shm_close($shm_id); ?>
10.62.1 shm_open
int shm_open (int key, string flags, int mode, int size)
shm_open() peut créer ou ouvrir un bloc de mémoire
partagée.
Le troisième paramètre est le mode, c'est à dire les permissions que
vous donnez à ce bloc. Ce sont les mêmes que pour les fichiers. Ces
permissions doivent être passées sous forme d'octal (i.e. 0644).
Le dernier parmètre est la taille du bloc de mémoire, en ocets.
Note :
Note: Les troisième et quatrième parmaètres doivent être
passés à 0 si vous voulez ouvrir un bloc de mémoire partagée
déjà existant. En cas de succès shm_open() retourne
un identifiant que vous pouvez utiliser pour accéder à la mémoire
que vous venez de créer.
<?php $shm_id = shm_open(0x0fff, "c", 0644, 100); ?>
10.62.2 shm_read
string shm_read (int shmid, int start, int count)
shm_read() lit une chaîne dans une bloc de mémoire partagée.
<?php $shm_data = shm_read($shm_id, 0, 50); ?>
10.62.3 shm_write
int shm_write (int shmid, string data, int offset)
shm_write() écrit une chaîne dans un bloc de mémoire partagée.
<?php $shm_bytes_written = shm_write($shm_id, $my_string, 0); ?>
10.62.4 shm_size
int shm_size (int shmid)
shm_size() sert à connaître la taille, en octets,
d'un bloc de mémoire partagée block.
<?php $shm_size = shm_size($shm_id); ?>
10.62.5 shm_delete
int shm_delete (int shmid)
shm_delete() sert à détruire un bloc de mémoire
partagée.
<?php shm_delete($shm_id); ?>
10.62.6 shm_close
int shm_close (int shmid)
shm_close() sert à fermer un bloc de mémoire partagée.
<?php shm_close($shm_id); ?>
10.63 SNMP functions
Afin de pouvoir utiliser les fonctions SNMP sous Unix, vous aurez
besoin d'installer le package UCD SNMP.
Sous Windows ces fonctions ne sont disponibles que sous NT, et pas sous Win95/98.
#define NO_ZEROLENGTH_COMMUNITY 1
10.63.1 snmpget
string snmpget (string hostname, string community, string object_id, int timeout, int retries)
Retourne un objet SNMP en cas de succès, et FALSE en cas d'erreur.
$syscontact = snmpget("127.0.0.1", "public", "system.SysContact.0")
10.63.2 snmpset
string snmpget (string hostname, string community, string object_id, string type, mixed value, int timeout, int retries)
Fixe la valeur de l'objet SNMP spécifié, en retournant TRUE en cas de succès
et FALSE en cas d'erreur.
10.63.3 snmpwalk
array snmpwalk (string hostname, string community, string object_id, int timeout , int retries )
Retourne un tableau d'objets SNMP, en commencant à partir de
object_id comme racine, ou FALSE en cas d'erreur.
$a = snmpwalk("127.0.0.1", "public", "");
for ($i=0; $i<count($a); $i++) { echo $a[$i]; }
10.63.4 snmpwalkoid
array snmpwalkoid (string hostname, string community, string object_id, int timeout , int retries )
Retourne un tableau associatif, avec les identifiants d'objet et les objets
associés, pour tous les objets situés sous la racine
object_id, ou FALSE en cas d'erreur.
$a = snmpwalkoid("127.0.0.1", "public", "");
for (reset($a); $i = key($a); next($a)) { echo "$i: $a[$i]<br>\n"; }
10.63.5 snmp_get_quick_print
boolean snmp_get_quick_print (void ) Retourne la valeur courante, stockée dans la librairie UCD, de l'option quick_print. Par défaut, quick_print est inactivée. $quickprint = snmp_get_quick_print();
10.63.6 snmp_set_quick_print
void snmp_set_quick_print (boolean quick_print)
Fixe la valeur de l'option quick_print de la librairie UCD SNMP. Lorsqu'elle a
la valeur de (1), la librairie SNMP retournera des valeurs 'rapides'. Cela
signifie que seule, la valeur sera retournée. Lorsqu'elle a la valeur de (0),
la librairie va afficher d'autres informations (telles que l'adresse IP
(IpAddress) ou OID). De plus, si quick_print n'est pas activée, la librairie
affichera aussi des valeurs hexadécimales supplémentaires pour toutes les chaînes
de trois caractères, ou moins.
snmp_set_quick_print(0); $a = snmpget("127.0.0.1", "public", ".1.3.6.1.2.1.2.2.1.9.1"); echo "$a<BR>\n"; snmp_set_quick_print(1); $a = snmpget("127.0.0.1", "public", ".1.3.6.1.2.1.2.2.1.9.1"); echo "$a<BR>\n";
10.64 Socket
L'extension socket implémente une interface bas niveau avec les
fonctions de communication par socket. Cela permet de mettre en place
un serveur aussi bien qu'un client.
Cet exemple est un serveur perroquete : tout ce que vous lui envoyez vous est retourné. Changez les variables address et port pour les adapter à votre configuration, et lancez le script. Vous pouvez vous connecter au serveur avec une commande telle que
Cet exemple est un client HTTP basique. Il se connecte à une page envoi les entêtes (requête HEAD), affiche le retour, et quitte.
10.64.1 accept_connect
int accept_connect (int socket)
Une fois que la socket socket a été créé, avec la
fonction socket(), liée à un nom avec bind(),
et mise en attente de connexion avec listen(),
accept_connect() accepte les connexions sur la socket
socket. Une fois que la connexion est faite,
un nouveau pointeur de socket est retourné, pour utilisation ultérieure.
Si il n'y a pas de connexion en attente, accept_connect()
se bloquera jusqu'à une connexion soit disponible. Si socket
a été configurée comme non-bloquante, avec @xref{function.socket-set-blocking , , socket_set_blocking()}
ou @xref{function.set-nonblock , , set_nonblock()}, une erreur sera retournée.
10.64.2 bind
int bind (int socket, string address, int protocol )
bind() lie le nom address,
à la socket socket, qui doit être une socket
valide, créée avec socket().
10.64.3 close
bool close (int socket)
close() ferme le fichier (ou la socket)
socket.
10.64.4 connect
int connect (int socket, string address, int port )
Initie une connexion avec la socket socket,
qui doit être une socket valide, créée avec socket().
10.64.5 listen
int listen (int socket, int backlog)
Une fois que la socket socket a été créée avec
socket() et liée avec bind(), elle peut être
mise en attente de connexion entrante. Un maximum de backlog
connexion entrantes seront mises en attente de traitement.
10.64.6 socket
int socket (int domain, int type, int protocol)
Crée un point de communication, dit socket, et retourne un pointeur de
socket.
10.64.7 strerror
string strerror (int errno)
strerror() prend comme paramètre errno
la valeur négative de retour d'une fonction de socket, et retourne l'explication
correspondante au format texte. Cela facilite grandement la recherche d'erreur.
Par exemple, au lieu d'être bloqué par une erreur '-111', et de devoir en
rechercher la signification dans les fichiers systèmes, il suffit de la
passer à strerror(), pour savoir ce qui s'est passé.
<?php if (($socket = socket(AF_INET, SOCK_STREAM, 0)) < 0) { echo "socket() a échoué : raison: " . strerror($socket) . "\n"; } if (($ret = bind($socket, '127.0.0.1', 80)) < 0) { echo "bind() a échoué : raison: " . strerror($ret) . "\n"; } ?>Le résultat de l'exemple ci dessus (en supposant que le script n'est pas exécuté avec les droits du root) :bind() a échoué : raison : Permission denied
10.65 Chaîne de caractères
Ces fonctions permettent la manipulations de chaînes de caractères. Certaines
sections plus spécialisées sont disponibles dès les sections sur les expressions
régulières et dans la section URL.
10.65.1 AddCSlashes
string addcslashes (string str, string charlist) Retourne une chaîne avec des backslash devant les caractères qui sont dans la liste charlist. Les caractères \n, \r etc. sont échappés. En langage C, les caractères avec un code ASCII inférieur à 32 ou supérieur à 126 sont convertis en représentation octale. Faites bien attention lorsque vous échappez des caractères alpha-numériques. Vous pouvez spécifier un intervalle dans charlist comme "\0..\37", qui échappera les caractères compris dans cet intervalle. Exemple avec addcslashes() $escaped = addcslashes ($no_echappe, "\0..\37!@\177..\377");
Note :
Ajouté dans PHP4b3-dev. 10.65.2 AddSlashes
string addslashes (string str)
Retourne une chaîne avec des backslashes devant chaque caractère qui a en a besoin
pour être inséré dans une requête de base de données. Ces caractères sont
guillemets simples ('), guillemets doubles ("),
backslash (\) et NULL (la valeur null).
10.65.3 bin2hex
string bin2hex (string str)
Retourne une chaîne ASCII contenant la représentation hexadécimale de
str. La conversion est faite avec le bit de poids fort
en premier.
10.65.4 Chop
string chop (string str) Retourne l'argument sans les espaces de fin de chaîne. Exemple avec chop() $trimmed = chop ($line);
10.65.5 Chr
string chr (int ascii) Retourne le caractère de code ASCII ascii. Exemple avec chr() $str .= chr (27); /* ajoute un échappement à la fin de la chaîne $str */ /* Généralement, ceci est plus efficace */ $str = sprintf ("Cette chaîne se termine par un escape: %c", 27);
Cette fonction est le contraire de ord().
Voir aussi sprintf() avec le format de chaîne
%c.
10.65.6 chunk_split
string chunk_split (string string, int chunklen , string end ) Permet de scinder une chaîne en plus petit morceaux, comme dans le cas de la conversion en 10.69.2 base64_encode pour se conformer à la RFC 2045. Cette fonction insère une fin de chaîne end (par défaut "\r\n"), tous les chunklen (par défaut 76) caractères. La chaîne retournée est une nouvelle chaîne, et l'original n'est pas modifié. Exemple avec chunk_split() # formate $data avec la sémantique RFC 2045 $new_string = chunk_split (base64_encode($data));
Cette fonction est nettement plus rapide que ereg_replace().
Note :
Cette fonction a été ajoutée en 3.0.6.
10.65.7 convert_cyr_string
string convert_cyr_string (string str, string from, string to) Cette fonction convertit la chaîne donnée depuis un alphabet cyrillique vers un autre. Les arguments from et to sont des caractères qui représentent la source et la destination. Les valeurs acceptées :
10.65.8 count_chars
mixed count_chars (string string, mode ) Compte le nombre d'occurence de chaque octet (0..255) dans la chaîne string et le retourne de différente façon. L'option Mode prend, par défaut, la valeur 0. Suivant le mode, count_chars() retourne une des réponses suivante :
10.65.9 crc32
int crc32 (string str)
crc32() génère la somme de vérification
de redondance cyclique (32-bit) de la chaîne str.
Cette valeur sert généralement à vérifier l'intégrité de données transmises.
10.65.10 crypt
string crypt (string str, string salt )
crypt() va coder une chaîne en utilisant la méthode d'encryption
du DES standard. Les arguments sont : la chaîne à encrypter,
et un grain de sel qui servira de base pour l'encryption.
Reportez vous au manuel Unix pour plus de détails.
Il n'y a pas d'algorithme de décryptage, étant donné que
crypt() est injective.
10.65.11 echo
echo (string arg1, string argn... )
Affiche tous les paramètres.
echo "Bonjour Monde"; echo "Cet echo se répartis sur plusieurs lignes. Les nouvelles lignes seront aussi affichées"; echo "et echo se\nrépartis sur plusieurs lignes. Les nouvelles lignes\nseront aussi affichées.";
10.65.12 explode
array explode (string separator, string string) Retourne un tableau qui contient les éléments de la chaîne, séparés par separator. Exemple avec explode() $pizza = "piece1 piece2 piece3 piece4 piece5 piece6"; $pieces = explode (" ", $pizza);
10.65.13 get_html_translation_table
string get_html_translation_table (int table) get_html_translation_table() retourne la table de traduction utilisée en interne par htmlspecialchars() et htmlentities(). Il y a deux nouvelles définitions : (HTML_ENTITIES, HTML_SPECIALCHARS) qui vous permettent de spécifier vos propres tables. Exemple de table de traduction $trans = get_html_translation_table (HTML_ENTITIES); $str = "Hallo & >Frau> & Krämer"; $encoded = strtr ($str, $trans);
La variable $encoded va contenir désormais : "Hallo
& $trans = array_flip ($trans); $original = strtr ($str, $trans);
Le contenu de $original sera : "Hallo & >Frau> & Krämer".
Note :
Cette fonction a été ajoutée en PHP 4.0.
10.65.14 get_meta_tags
array get_meta_tags (string filename, int use_include_path ) Ouvre le fichier filename et l'analyse ligne par ligne, en recherchant les balises <meta>. Meta Tags Example <meta name="author" content="name"> <meta name="tags" content="php3 documentation"> </head> <!-- parsing stops here -->
(Faites bien attention aux fins de lignes. PHP utilise une fonction native pour
analyser le fichier d'entrée, ce qui fait que les fichiers faits sous Mac
ne fonctionneront pas sous Unix).
10.65.15 hebrev
string hebrev (string hebrew_text, int max_chars_per_line )
Le paramètre optionnel max_chars_per_line
indique le nombre maximum de caractères par ligne qui seront générés.
la fonction essaie d'éviter les césures de mots.
10.65.16 hebrevc
string hebrevc (string hebrew_text, int max_chars_per_line )
hebrevc() est similaire à hebrev(),
au détail près qu'elle converti les nouvelles lignes
(\n) en "<br>\n".
Le paramètre optionnel max_chars_per_line
indique le nombre maximum de caractères par ligne qui seront générés.
la fonction essaie d'éviter les césures de mots.
10.65.17 htmlentities
string htmlentities (string string)
Cette fonction est identique à
htmlspecialchars() en tous points, sauf que tous les caractères
qui ont une entité équivalente en HTML sont replacés par ces entités.
10.65.18 htmlspecialchars
string htmlspecialchars (string string)
Certains caractères ont une valeur avec HTML, et doivent être remplacés par des
balises HTML pour conserver leur valeur. Cette fonction retourne une chaîne avec
tous les caractères sensibles remplacés par leur équivalent.
10.65.19 implode
string implode (string glue, array pieces) Retourne une chaîne constituée de tous les éléments du tableau, pris dans l'ordre, transformés en chaîne, et séparés par glue. Exemple avec implode() $colon_separated = implode (":", $array);
10.65.20 join
string join (string glue, array pieces)
join() join() est un alias de implode(),
et lui est identique en tous points.
10.65.21 levenshtein
int levenshtein (string str1, string str2)
levenshtein() retourne la distance Levenshtein
entre les deux chaînes str1 et str1
ou -1 si un des arguments excéde la limite de 255 caractères.
10.65.22 ltrim
string ltrim (string str)
Cette fonction enlève les caractères blancs placés au début d'une chaîne et
retourne la chaîne raccourcie.
Les caractères blancs sont : "\n", "\r", "\t", "\v", "\0", et " ".
10.65.23 md5
string md5 (string str)
Crypte la chaîne str en utilisant la méthode MD5
(voir RSA Data Security. Inc. MD5 Message-Digest Algorithm.).
10.65.24 Metaphone
string metaphone (string str)
Calcule la clé métaphone de la chaîne str.
10.65.25 nl2br
string nl2br (string string)
Retourne la chaîne string dont toutes les lignes ont été
remplacées par '<BR>'.
10.65.26 Ord
int ord (string string) Retourne la valeur ASCII du premier caractère de la chaîne string. Cette fonction est le contraire de chr(). Exemple avec ord() if (ord ($str) == 10) { echo "Le premier caractère de \$str est un retour chariot.\n"; }
10.65.27 parse_str
void parse_str (string str)
Analyse la chaîne str comme si c'etait une chaîne passée
par URL, et affecte les variables qu'elle y trouve.
$str = "first=value&second[]=this+works&second[]=another"; parse_str($str); echo $first; /* prints "value" */ echo $second[0]; /* prints "this works" */ echo $second[1]; /* prints "another" */
10.65.28 print
print (string arg)
Affiche arg.
10.65.29 printf
int printf (string format, mixed args... )
Affiche les arguments en fonction du format. Ce format est
décrit en détails dans la documentation de sprintf().
10.65.30 quoted_printable_decode
string quoted_printable_decode (string str)
Cette fonction retourne une chaîne 8-bit résultant du décodage de la chaîne
str.
Cette fonction est similaire à imap_qprint(), hormis le fait
qu'elle ne requiert pas le module IMAP.
10.65.31 QuoteMeta
string quotemeta (string str) Retourne une version de la chaîne str, avec un backslash (\) devant tous les caractères de la liste ci-dessous : . \\ + * ? [ ^ ] ( $ )
10.65.32 rtrim
string rtrim (string str) rtrim() la chaîne str, débarassée de ses espaces terminaux, y compris les nouvelles lignes. Cette fonction est un alias de chop(). Exemple avec rtrim() example $trimmed = rtrim ($line); 10.65.33 sscanf
mixed sscanf (string str, string format, string var1... ) sscanf() est le complémentaire de printf(). sscanf() lit les données de la chaîne str et interprète son contenu en fonction du format format. Si seulement deux paramètres sont passés à cette fonction, les valeurs obtenues seront retournées sous forme d'un tableau. Exemple avec sscanf() // lecture d'un numéro de série $serial = sscanf("SN/2350001","SN/%d"); // et la date de fabrication $mandate = "January 01 2000"; list($month, $day, $year) = sscanf($mandate,"%s %d %d"); echo "Le produit $serial a été fabriqué le: $year-".substr($month,0,3)."-$day\n"; Si les paramètres optionnels sont passés, la fonction retournera le nombre de valeurs assignés. Les options doivent être passés par référence. Utilisation des options avec sscanf() // Lecture des informations d'auteur, et génération d'une entrée DocBook $auth = "24\tVictor Hugo"; $n = sscanf($auth,"%d\t%s %s", &$id, &$first, &$last); echo "<auteur id='$id'> <Prénom>$first</firstname> <Nom>$last</surname> </auteur>\n";
10.65.34 setlocale
string setlocale (string category, string locale) Category est une chaîne qui spécifie la catégorie de fonction qui va être affectée par les informations locales :
10.65.35 similar_text
int similar_text (string first, string second, double percent )
Cette fonction calcule la similarité entre deux chaînes, comme décrit par Oliver
[1993]. Notez que cette implémentation n'utilise pas une pile, comme dans le
pseudo-code d'Oliver, mais un appel récursif qui accélère parfois l'exécution.
Notez aussi que la complexité de cet algorithme est en o(N**3) avec N la taille
de la plus grande chaîne.
10.65.36 soundex
string soundex (string str)
Calcule la valeur soundex de str.
soundex ("Euler") == soundex ("Ellery") == 'E460'; soundex ("Gauss") == soundex ("Ghosh") == 'G200'; soundex ("Knuth") == soundex ("Kant") == 'H416'; soundex ("Lloyd") == soundex ("Ladd") == 'L300'; soundex ("Lukasiewicz") == soundex ("Lissajous") == 'L222';
10.65.37 sprintf
string sprintf (string format, mixed args... )
Retourne une chaîne formatée avec le format format.
$isodate = sprintf ("%04d-%02d-%02d", $year, $month, $day); Exemple avec sprintf(): format monétaire $money1 = 68.75; $money2 = 54.35; $money = $money1 + $money2; // echo $money affichera "123.1"; $formatted = sprintf ("%01.2f", $money); // echo $formatted affichera "123.10"
10.65.38 strcasecmp
int strcasecmp (string str1, string str2) Retourne < 0 si str1 est plus petit que str2; > 0 si str1 est plus grand que str2, et 0 si ils sont égaux. Exemple avec strcasecmp() $var1 = "Bonjour"; $var2 = "bonjour"; if ( !strcasecmp($var1,$var2) ) { echo '$var1 est égal à $var2, à la casse près.'; }
10.65.39 strchr
string strchr (string haystack, string needle)
Cette fonction est un alias de strstr(), et lui est
identique en tous points.
10.65.40 strcmp
int strcmp (string str1, string str2)
Retourne < 0 si str1 est plus petit que
str2; > 0 si str1
est plus grand que str2, et 0 si ils sont égaux.
10.65.41 strcspn
int strcspn (string str1, string str2)
Retourne la longueur du premier segment de la chaîne str1
qui ne contiennent pas aucun des
caractères de la chaîne str2.
10.65.42 strip_tags
string strip_tags (string str, string allowable_tags )
Cette fonction recherche et supprime toutes les balises HTML et PHP d'une chaîne.
En cas de balises non fermées, ou de balises mal formées, elle génère une erreur.
Cette fonction utilise le même système que la fonction fgetss().
10.65.43 StripCSlashes
string stripcslashes (string str)
Retourne une chaîne dont les backslashes ont été supprimés. Cette fonction reconnait
les \n, \r ..., et les représentation octales
et hexadécimales utilisées en C.
Note :
Ajouté dans PHP4b3-dev.
10.65.44 StripSlashes
string stripslashes (string str)
Retourne une chaîne dont tous les slashes ont été supprimés.
(\' devient ', ... et ainsi de suite).
Les doubles backslashes sont remplacés par des simples.
10.65.45 stristr
string stristr (string haystack, string needle)
Retourne tous les éléments de haystack à partir de la
première occurence de needle, jusqu'à la fin.
needle et haystack
sont examinés sans tenir compte de la casse.
10.65.46 strlen
int strlen (string str)
Retourne la longueur de la chaîne string.
10.65.47 strnatcmp
int strnatcmp (string str1, string str2) Cette fonction implémente un algorithme de comparaison qui traite les chaînes alphanumériques comme un être humain : c'est ce qui est appelé l'"ordre naturel". Un exemple de la différence de traitement entre un tel algorithme et un algorithme de comparaison de chaîne (comme lorsqu'on utilise strcmp()) est illustré ci dessous : below: $arr1 = $arr2 = array ("img12.png","img10.png","img2.png","img1.png"); echo "Comparaison standard de chaînes\n"; usort($arr1,"strcmp"); print_r($arr1); echo "\nComparaison de chaînes par ordre naturel\n"; usort($arr2,"strnatcmp"); print_r($arr2); L'exemple précédent affiche ceci : Comparaison standard de chaînes Array ( [0] => img1.png [1] => img10.png [2] => img12.png [3] => img2.png ) Comparaison de chaînes par ordre naturel Array ( [0] => img1.png [1] => img2.png [2] => img10.png [3] => img12.png )
Pour plus d'informations, reportez vous à Martin Pool's Natural Order String Comparison.
10.65.48 strnatcasecmp
int strnatcasecmp (string str1, string str2)
Cette fonction implémente un algorithme de comparaison qui traite les chaînes
alphanumériques comme un être humain : c'est ce qui est appelé
l'"ordre naturel". Pour plus d'informations, reportez vous à Martin Pool's Natural Order String Comparison.
10.65.49 strncmp
int strncmp (string str1, string str2, int len)
strncmp() est similaire à strcmp(),
à la différence près que vous pouvez spécifier le nombre limite de
caractères (len) utilisés pour faire la comparaison.
Si l'une des chaînes est plus courte que len,
alors cette longueur sera utilisée pour faire la comparaison.
10.65.50 str_pad
string str_pad (string input, int pad_length, string pad_string, int pad_type )
str_pad() complète la chaîne input
à droite, à gauche ou dans les deux directions, avec
pad_string jusqu'à la taille de
pad_length. Si pad_string
n'est pas fourni, input est complété avec des espaces.
Sinon, il est complété avec pad_string.
$input = "Paris"; print str_pad($input, 10); // produces "Paris " print str_pad($input, 10, "-=", STR_PAD_LEFT); // produces "-=-=-Paris" print str_pad($input, 10, "_", STR_PAD_BOTH); // produces "__Paris___"
10.65.51 strpos
int strpos (string haystack, string needle, int offset )
Retourne la position numérique de la première occurence de
needle dans la chaîne haystack.
Contrairement à strrpos(), needle peut
être une chaîne.
// PHP 4.0b3 et plus récent : $pos = strpos ("b", $mystring); if ($pos === false) { // note: trois égal signes // non trouvé // versions plus anciennes que 4.0b3: $pos = strpos ("b", $mystring); if (is_string ($pos) && !$pos) { // non trouvé }
10.65.52 strrchr
string strrchr (string haystack, string needle)
Cette fonction retourne la partie de la chaîne haystack
qui commence à la dernière occurence de needle et va
jusqu'à la fin de la chaîne haystack.
// lis le dernier repertoire de $PATH $dir = substr (strrchr ($PATH, ":"), 1); // lis tout après la dernière ligne $text = "Line 1\nLine 2\nLine 3"; $last = substr (strrchr ($text, 10), 1 );
10.65.53 str_repeat
string str_repeat (string input, int multiplier)
Retourne input_str répétées multiplier
fois. multiplier doit être plus grand que 0.
echo str_repeat ("-=", 10);
Cet exemple affichera "-=-=-=-=-=-=-=-=-=-=".
10.65.54 strrev
string strrev (string string)
Retourne string, après avoir changé l'ordre des caractères.
10.65.55 strrpos
int strrpos (string haystack, char needle)
Retourne la position numérique de la dernière occurence de
needle dans la chaîne haystack string.
Cette fonction ne peut accepter qu'un seul caractère.
10.65.56 strspn
int strspn (string str1, string str2)
Retourne la longueur du premier segment de str1
qui est constitué entièrement de caractères dans la chaîne
str2.
10.65.57 strstr
string strstr (string haystack, string needle)
Retourne toute la chaîne haystack à partir de la première
occurrence de needle, jusqu'à la fin.
$email = 'sterling@designmultimedia.com'; $domain = strstr ($email, ''); print $domain; // affiche designmultimedia.com
10.65.58 strtok
string strtok (string arg1, string arg2) strtok() est utilisée pour morceller une chaîne. Pour cela, si vous avez une chaîne du type "ceci est une chaîne exemple", vous pouvez la morceller en mots, en utilisant ' ' comme délimiteur. Exemple avec strtok() $string = "ceci est une chaîne exemple"; $tok = strtok ($string," "); while ($tok) { echo "Mot=$tok<br>"; $tok = strtok (" "); }
10.65.59 strtolower
string strtolower (string str)
Retourne string avec tous les caractères alphabétiques en
minuscule.
$str = "Marie A Un Petit Agneau, Et Elle L'Adore"; $str = strtolower($str); print $str; # Affiche : marie a un petit agneau, et elle l'adore
Voir aussi strtoupper() et ucfirst().
10.65.60 strtoupper
string strtoupper (string string)
Retourne string avec tous ses caractères alphabétiques
mis en majuscule.
$str = "Marie A Un Petit Agneau, Et Elle L'Adore"; $str = strtoupper ($str); print $str; # Affiche : MARIE A UN PETIT AGNEAU, ET ELLE L'ADORE
Voir aussi strtolower() et ucfirst().
10.65.61 str_replace
string str_replace (string needle, string str, string haystack)
Cette fonction remplace toutes les occurences de needle
dans haystack par la chaîne str.
Si vous n'avez pas besoin de règles de remplacement sophistiquées,
vous pouvez toujours utiliser ereg_replace().
$bodytag = str_replace ("%body%", "black", "<body text=%body%>");
10.65.62 strtr
string strtr (string str, string from, string to)
Cette fonction travaille sur str, remplacant chaque
occurence de chaque caractère de la chaîne from
correspondant à la chaîne to et retourne le résultat.
$addr = strtr($addr, "äÂ^", "aao");
$trans = array ("hello" => "hi", "hi" => "hello"); echo strtr("hi all, I said hello", $trans) . "\n";
Cete exemple affichera : "hello all, I said hi",
10.65.63 substr
string substr (string string, int start, int length )
substr() retourne une portion de string,
spécifiée avec le début start et la longeur
length.
$rest = substr ("abcdef", 1); // retourne "bcdef" $rest = substr ("abcdef", 1, 3); // retourne "bcd"
$rest = substr ("abcdef", -1); // retourne "f" $rest = substr ("abcdef", -2); // retourne "ef" $rest = substr ("abcdef", -3, 1); // retourne "d"
$rest = substr ("abcdef", 1, -1); // retourne "bcde"
10.65.64 substr_count
int substr_count (string haystrack, string needle)
substr_count() retourne le nombre de fois que
needle apparait dans haystack.
print substr_count("Ceci est un test", "es"); // affiche 2s
10.65.65 substr_replace
string substr_replace (string string, string replacement, int start, int length )
substr_replace() effectue un remplacement dans la portion de
string délimitée par le caractère start
et de longueur optionnelle length. Le remplacement est
fait avec la chaîne replacement. Le résultat est retourné.
<?php $var = 'ABCDEFGH:/MNRPQR/'; echo "Original: $var<hr>\n"; /* Ces deux exemples remplacent tout $var avec 'bob'. */ echo substr_replace ($var, 'bob', 0) . "<br>\n"; echo substr_replace ($var, 'bob', 0, strlen ($var)) . "<br>\n"; /* Insère 'bob' à gauche, du début de $var. */ echo substr_replace ($var, 'bob', 0, 0) . "<br>\n"; /* Ces deux exemples remplacent 'MNRPQR' dans $var avec 'bob'. */ echo substr_replace ($var, 'bob', 10, -1) . "<br>\n"; echo substr_replace ($var, 'bob', -7, -1) . "<br>\n"; /* Efface 'MNRPQR' dans $var. */ echo substr_replace ($var, '', 10, -1) . "<br>\n"; ?>
10.65.66 trim
string trim (string str)
Cette fonction retire les espaces blancs de début et de fin de chaîne, et
retourne la chaîne nettoyée. Les espaces blancs sont :
"\n", "\r", "\t", "\v", "\0", et " " (espace).
10.65.67 ucfirst
string ucfirst (string str)
Met le premier caractère d'une chaîne str en majuscule, si
ce caractère est alphabétique.
$text = 'marie a un petit agneau, et l'adore.'; $text = ucfirst($text); // $text vaut : Marie a un petit agneau, et l'adore
10.65.68 ucwords
string ucwords (string str) Met le premier caractère de chaque mot de la chaîne str si ce caractère est une lettre. Exemple avec ucwords() $text = "marie a un petit agneau, et l'adore."; $text = ucwords($text); // $text vaut : Marie A Un Petit Agneau, Et l'Adore.
10.65.69 wordwrap
string wordwrap (string str, int width , string break )
Ajoute la césure str au numéro de colonne
width. La ligne est césurée avec la chaîne
break.
$text = "Maître corbeau jura, mais un peu tard, qu'on ne l'y prendrait plus."; $newtext = wordwrap( $text, 20 ); echo "$newtext\n";
Maître corbeau jura, mais un peu t ard, qu'on ne l'y pr endrait plus
10.66 Flash (Shockwave)
PHP a la capacité de créer des animations Shockwave Flash grâce au module de Paul
Haeberli : libswf module. Vous pouvez télécharger libswf à
http://reality.sgi.com/grafica/flash/. Une fois que vous avez libswf, tout
ce qui reste à faire est de configurer PHP avec
--with-swf[=DIR] oú DIR est le dossier qui
accueille les dossiers de include et lib. Le dossier include doit contenir le
fichier swf.h file et le dossier lib doit contenir le fichier libswf.a.
Si vous décompressez la distribution de libswf, les deux fichiers seront dans le
même dossier. Par conséquent, vous devrez les mettre dans le dossier ad hoc
manuellement.
<?php swf_openfile ("test.swf", 256, 256, 30, 1, 1, 1); swf_ortho2 (-100, 100, -100, 100); swf_defineline (1, -70, 0, 70, 0, .2); swf_definerect (4, 60, -10, 70, 0, 0); swf_definerect (5, -60, 0, -70, 10, 0); swf_addcolor (0, 0, 0, 0); swf_definefont (10, "Mod"); swf_fontsize (5); swf_fontslant (10); swf_definetext (11, "Voici le mariage de FLASH et PHP!", 1); swf_pushmatrix (); swf_translate (-50, 80, 0); swf_placeobject (11, 60); swf_popmatrix (); for ($i = 0; $i < 30; $i++) { $p = $i/(30-1); swf_pushmatrix (); swf_scale (1-($p*.9), 1, 1); swf_rotate (60*$p, 'z'); swf_translate (20+20*$p, $p/1.5, 0); swf_rotate (270*$p, 'z'); swf_addcolor ($p, 0, $p/1.2, -$p); swf_placeobject (1, 50); swf_placeobject (4, 50); swf_placeobject (5, 50); swf_popmatrix (); swf_showframe (); } for ($i = 0; $i < 30; $i++) { swf_removeobject (50); if (($i%4) == 0) { swf_showframe (); } } swf_startdoaction (); swf_actionstop (); swf_enddoaction (); swf_closefile (); ?>
Cela va produire une animation, proche de celle ci;
(mais traduite en anglais).
10.66.1 swf_openfile
void swf_openfile (string filename , float width , float height , float framerate , float r , float g , float b )
swf_openfile() crée un nouveau fichier
filename de largeur width, et de
hauteur height, à la vitesse de
framerate, de couleur de fond RGB (r,
g, b).
10.66.2 swf_closefile
void swf_closefile
Ferme le fichier courant, qui a été ouvert avec swf_openfile().
10.66.3 swf_labelframe
void swf_labelframe (string name )
Donne le nom name au frame courant.
10.66.4 swf_showframe
void swf_showframe
swf_showframe() affiche le frame courant.
10.66.5 swf_setframe
void swf_setframe (int framenumber )
swf_setframe() selectionne le frame
framenumber comme frame actif.
10.66.6 swf_getframe
int swf_getframe
swf_getframe() retourne le numéro de frame courant.
10.66.7 swf_mulcolor
void swf_mulcolor (float r , float g , float b , float a )
swf_mulcolor() fixe la valeur globale de multiplication
(the global multiply color...) à la couleur rgba.
Cette couleur est utilisée (implicitement) par swf_placeobject(),
swf_modifyobject() et swf_addbuttonrecord().
La couleur d'un objet sera multipliée par rgba
lorsque l'objet est placé sur la scène.
10.66.8 swf_addcolor
void swf_addcolor (float r , float g , float b , float a )
swf_mulcolor() fixe la valeur globale de multiplication
(the global multiply color...) à la couleur rgba.
Cette couleur est utilisée (implicitement) par swf_placeobject(),
swf_modifyobject() et swf_addbuttonrecord().
La couleur d'un objet sera ajouté à rgba
lorsque l'objet est placé sur la scène.
10.66.9 swf_placeobject
void swf_placeobject (int objid , int depth )
Place l'objet objid dans le frame courant, à la profondeur
depth. objid et
depth doivent être compris entre 1 et 65535.
10.66.10 swf_modifyobject
void swf_modifyobject (int depth , int how )
Modifie la position et/ou la couleur de l'objet situé à la profondeur de
depth. L'argument how détermine
ce qui doit être modifié. how peut prendre les valeurs de
MOD_MATRIX, MOD_COLOR ou la combinaison des deux.
10.66.11 swf_removeobject
void swf_removeobject (int depth )
Enlève l'objet situé à la profondeur depth de la scène.
10.66.12 swf_nextid
int swf_nextid
swf_nextid() retourne le prochain identifiant d'objet libre.
10.66.13 swf_startdoaction
void swf_startdoaction
swf_startdoaction() commence la déscription d'une liste
d'action pour la frame courante. Cette fonction doit être appelée avant que les
actions ne soient définies pour le cadre courant.
10.66.14 swf_actiongotoframe
void swf_actiongotoframe (int framenumber )
swf_actiongotoframe() se déplace jusqu'au frame
framenumber, le joue, puis s'arrête.
10.66.15 swf_actiongeturl
void swf_actiongeturl (string url , string target )
swf_actiongeturl() lit l'URL url,
avec la destination target.
10.66.16 swf_actionnextframe
void swf_actionnextframe
swf_actionnextframe() avance d'un frame le frame courant.
10.66.17 swf_actionprevframe
void swf_actionprevframe
swf_actionnextframe() recule d'un frame le frame courant.
10.66.18 swf_actionplay
void swf_actionplay
swf_actionplay() joue l'animation flash à partir du frame
courant.
10.66.19 swf_actionstop
void swf_actionstop
Arrête l'animation flash au frame courant.
10.66.20 swf_actiontogglequality
Choisi le niveau de qualité haut ou bas.
10.66.21 swf_actionwaitforframe
void swf_actionwaitforframe (int framenumber , int skipcount )
swf_actionwaitforframe() vérifie que le frame
framenumber a bien été chargé. Si ce n'est pas le cas,
elle ignore les actions skipcount. Cela est très utile pour
les séquences du type "Chargement...".
10.66.22 swf_actionsettarget
void swf_actionsettarget (string target )
swf_actionsettarget() fixe le contexte des actions.
Vous pouvez utiliser cette fonction pour contrôler d'autres animations Flash qui
seraient en fonctionnement.
10.66.23 swf_actiongotolabel
void swf_actiongotolabel (string label )
swf_actiongotolabel() affiche le frame de nom
label, puis stoppe.
10.66.24 swf_enddoaction
void swf_enddoaction
swf_startdoaction() termine l'action courante.
10.66.25 swf_defineline
void swf_defineline (int objid , float x1 , float y1 , float x2 , float y2 , float width )
swf_defineline() définit une ligne commencant aux coordonnées
(x1, y1 ), et finissant au point
de coordonnées (x2, y2).
Elle aura la largeur de width.
10.66.26 swf_definerect
void swf_definerect (int objid , float x1 , float y1 , float x2 , float y2 , float width )
swf_definerect() définit un rectangle, de coin supérieur gauche
aux coordoonées (x1,y1), et de coin
inférieur droit aux coordonnées (x2, y2).
L'épaisseur des bords est données par le paramètre width.
width, 0.0 le rectangle sera rempli.
10.66.27 swf_definepoly
void swf_definepoly (int objid , array coords , int npoints , float width )
swf_definepoly() définit un polygone, dont les coordonnées des
sommets sont placés dans le tableau coords).
npoints est le nombre de points contenu dans le tableau
coords. width est la largeur des bords
du polygone. Si width vaut 0.0, le polygone sera rempli.
10.66.28 swf_startshape
void swf_startshape (int objid )
swf_startshape() commence une forme complexe, qui sera reperé
par l'identifiant d'objet objid.
10.66.29 swf_shapelinesolid
void swf_shapelinesolid (float r , float g , float b , float a , float width )
swf_shapelinesolid() permet de choisir le style de ligne, à savoir
la couleur et la largeur. Si width vaut 0.0, les lignes ne
seront pas dessinées.
10.66.30 swf_shapefilloff
void swf_shapefilloff
swf_shapefilloff() inactive le remplissage pour la
forme courante.
10.66.31 swf_shapefillsolid
void swf_shapefillsolid (float r , float g , float b , float a )
swf_shapefillsolid() fixe la couleur pour le style courant
de remplissage à rgba.
10.66.32 swf_shapefillbitmaptile
void swf_shapefillbitmapclip (int bitmapid )
Choisi le mode de remplissage par texture : les espaces vides seront remplis avec
la bitmap bitmapid.
10.66.33 swf_shapefillbitmaptile
void swf_shapefillbitmaptile (int bitmapid )
Choisi le mode de remplissage par texture : les espaces vides seront remplis avec
la bitmap bitmapid, repétée autant de fois qu'il le faut.
10.66.34 swf_shapemoveto
void swf_shapemoveto (float x , float y )
swf_shapemoveto() fixe la position courante au point de
de coordonnées (x, y).
10.66.35 swf_shapelineto
void swf_shapelineto (float x , float y )
swf_shapelineto() dessine une ligne entre la position courante et
le points de coordonnées (x, y).
La position courante devient alors (x, y).
10.66.36 swf_shapecurveto
void swf_shapecurveto (float x1 , float y1 , float x2 , float y2 )
swf_shapecurveto() dessine la courbe de Bézier quadratique entre les points
de coordonnées (x1 , y1) et
(x2, y2). La position courante
devient alors (x2, et y2).
10.66.37 swf_shapecurveto3
void swf_shapecurveto3 (float x1 , float y1 , float x2 , float y2 , float x3 , float y3 )
Dessine une courbe de Bézier cubique, en utilisant les points de coordoonnées
(x1, y1) et
(x2,y2) comme points de contrôle,
et le point de coordonnées (x3, y3)
comme point final. La position finale devient alors la position courante.
10.66.38 swf_shapearc
void swf_shapearc (float x , float y , float r , float ang1 , float ang2 )
swf_shapearc() dessine un arc de cercle, depuis l'angle
ang1 jusqu'à l'angle ang2.
Le centre du cercle est aux coordonnées (x,
y), et de rayon r.
10.66.39 swf_endshape
void swf_endshape
swf_endshape() complète la définition de la forme courante.
10.66.40 swf_definefont
void swf_definefont (int fontid , string fontname )
swf_definefont() définit la police
fontname et lui affecte l'identifiant
fontid. Cette police devient alors la police courante.
10.66.41 swf_setfont
void swf_setfont (int fontid )
swf_setfont() remplace la police courante par la police
repérée par l'identifiant fontid.
10.66.42 swf_fontsize
void swf_fontsize (float size )
swf_fontsize() remplace la taille de la police par la taille
size.
10.66.43 swf_fontslant
void swf_fontslant (float slant )
swf_fontslant() fixe l'inclinaison de la police courante à
slant. Les valeurs positives values créeront une inclinaison
vers la droite, et les valeurs négatives, vers la gauche.
10.66.44 swf_fonttracking
void swf_fonttracking (float tracking )
swf_fonttracking() change l'espacement, et lui affecte la valeur
de thtracking. Cette fonction sert à accroître l'espace entre
les lettres et le texte. Les valeurs positives accroissent cet espace, et les valeurs
négatives le réduisent.
10.66.45 swf_getfontinfo
array swf_getfontinfo swf_getfontinfo() retourne la hauteur du A majuscule, et du x minuscule, dans un tableau associatif :
10.66.46 swf_definetext
void swf_definetext (int objid , string str , int docenter )
Définit la chaîne de texte str, en utilisant la police
courante. docenter indique si la chaîne doit être centrée
(valeur de 1), ou pas.
10.66.47 swf_textwidth
float swf_textwidth (string str )
swf_textwidth() retourne la longueur de la chaîne
str, en pixels, en utilisant la police courante.
10.66.48 swf_definebitmap
void swf_definebitmap (int objid , string image_name )
The swf_definebitmap() function defines a
bitmap given a GIF, JPEG, RGB or FI image. The image will be
converted into a Flash JPEG or Flash color map format.
10.66.49 swf_getbitmapinfo
array swf_getbitmapinfo (int bitmapid ) swf_getbitmapinfo() retourne un tableau d'information sur l'image bitmap repérée par bitmapid. Le tableau a les éléments suivant :
10.66.50 swf_startsymbol
void swf_startsymbol (int objid )
Définit un identifiant d'objet comme symbole. Les symboles sont des petites
animations flash qui peuvent être jouées simultanément.
objid est l'identifiant d'objet que vous voulez définir comme
symbole.
10.66.51 swf_endsymbol
void swf_endsymbol
swf_endsymbol() termine la définition de symble, qui a été
commencée avec swf_startsymbol().
10.66.52 swf_startbutton
void swf_startbutton (int objid , int type )
swf_startbutton() commence la définition d'un bouton.
type peut prendre les valeurs de TYPE_MENUBUTTON ou
TYPE_PUSHBUTTON. La constante TYPE_MENUBUTTON permet au focus de traverser
lorsque la souris est cliquée, alors que TYPE_PUSHBUTTON ne le permet pas.
10.66.53 swf_addbuttonrecord
void swf_addbuttonrecord (int states , int shapeid , int depth ) swf_addbuttonrecord() permet de modifier les caractéristiques d'un bouton. states, définit les états du bouton autorisés : ce peut être : BSHitTest, BSDown, BSOver ou BSUp. shapeid est l'apparance du bouton, c'est à dire l'objet qui représente le bouton. depth est la profondeur de placement du bouton, dans le frame courant. exemple avec swf_addbuttonrecord() exemple avec swf_addbuttonrecord() swf_startButton ($objid, TYPE_MENUBUTTON); swf_addButtonRecord (BSDown|BSOver, $buttonImageId, 340); swf_onCondition (MenuEnter); swf_actionGetUrl ("http://www.designmultimedia.com", "_level1"); swf_onCondition (MenuExit); swf_actionGetUrl ("", "_level1"); swf_endButton ();
10.66.54 swf_oncondition
void swf_oncondition (int transition ) swf_oncondition() décrit une transition qui va déclencher une liste d'actions. Il y a plusieurs types de transitions possibles, les suivantes sont destinées aux boutons de type TYPE_MENUBUTTON:
Pour les types TYPE_PUSHBUTTON voici les options :
10.66.55 swf_endbutton
void swf_endbutton
swf_endbutton() termine la définition du bouton courant.
10.66.56 swf_viewport
void swf_viewport (double xmin , double xmax , double ymin , double ymax )
swf_viewport() sélectionne une nouvelle zone pour y dessiner
ultérieurement. La zone est définie de xmin à
xmax et de ymin à
ymax. Si cette fonction n'est pas appelée, les valeurs par
défaut sont celles de l'écran courant.
10.66.57 swf_ortho
void swf_ortho (double xmin , double xmax , double ymin , double ymax , double zmin , double zmax )
swf_ortho() définit une projection orthogonale entre les
coordonnées utilisateur et le port courant.
10.66.58 swf_ortho2
void swf_ortho2 (double xmin , double xmax , double ymin , double ymax )
swf_ortho2() définit une projection orthogonale à 2 dimensions
entre les coordonnées utilisateur et le port courant. C'est la projection par
défaut des animations Flash. Si vous souhaitez une perspective, utilisez plutôt
swf_perspective().
10.66.59 swf_perspective
void swf_perspective (double fovy , double aspect , double near , double far )
swf_perspective() définit une projection orthogonale à 3
dimensions entre les coordonnées utilisateur et le port courant.
Le paramètre fovy est l'angle de vue de la direction y.
Le paramètre aspect doit être choisi pour correspondre au
ratio de la vue utilisée. near est le plan adjacent proche
far est le plan adjacent distant.
10.66.60 swf_polarview
void swf_polarview (double dist , double azimuth , double incidence , double twist )
swf_polarview() définit la position de l'utilisateur en coordonnées
polaires. dist est la distance entre le point de vue et
l'origine. azimuth définit l'angle azimutal dans le plan
x,y mesuré en distance depuis l'axe y. incidence
définit l'angle d'incidence dans le plan y,z, mesuré en distance depuis l'axe z.
Finalement, twist est l'angle de rotation du point de vue
sur la ligne de vue, en utilisant la règle de la main droite.
10.66.61 swf_lookat
void swf_lookat (double view_x , double view_y , double view_z , double reference_x , double reference_y , double reference_z , double twist )
swf_lookat() définit une transformation de vue, en donnant la
position de la vue, de coordonnées (view_x,
view_y, et view_z) et les coordonnées
du point de référence dans la scène, de coordonnées
(reference_x, reference_y
, reference_z). Le paramètre
twist contrôle la rotation le long de l'axe des z de
l'utilisateur.
10.66.62 swf_pushmatrix
void swf_pushmatrix
swf_pushmatrix() empile la matrice de transformation courante
dans la pile.
10.66.63 swf_popmatrix
void swf_popmatrix
swf_popmatrix() dépile la matrice de transformation.
10.66.64 swf_scale
void swf_scale (double x , double y , double z )
swf_scale() fait une mise à l'échelle de
x pour les coordonnées x, de
y pour les coordonnées y et
z pour les coordonnées z.
10.66.65 swf_translate
void swf_translate (double x , double y , double z )
swf_translate() translate la transformation courante de
x, y, et z,
dans les directions x, y et z.
10.66.66 swf_rotate
void swf_rotate (double angle , string axis )
swf_rotate() fait subir la roation d'angle
angle, autour de l'axe axis.
Les valeurs possibles pour axis sont :
'x' (axe x), 'y' (axe y) ou 'z' (axe z).
10.66.67 swf_posround
void swf_posround (int round )
swf_posround() active ou désactive l'approximation lors des
translations, lorsque des objets sont placés ou déplacés. Il y a des situations oú
le texte devient plus lisible lorsque l'approximation a été activée.
round active l'approximation (1) ou la désactive (0).
10.67 Sybase
10.67.1 sybase_affected_rows
int sybase_affected_rows (int link_identifier )
Retourne le nombre de lignes affectées par la dernière requête.
10.67.2 sybase_close
int sybase_close (int link_identifier)
Retourne TRUE en cas de succès, et FALSE en cas d'erreur.
10.67.3 sybase_connect
int sybase_connect (string servername, string username, string password)
Retourne un identifiant positif de lien Sybase en cas de succès, et
FALSE en cas d'erreur.
10.67.4 sybase_data_seek
int sybase_data_seek (int result_identifier, int row_number)
Retourne TRUE en cas de succès, et FALSE en cas d'échec.
10.67.5 sybase_fetch_array
int sybase_fetch_array (int result)
Retourne un tableau qui contient la ligne demandée, ou FALSE s'il ne reste
plus de ligne.
10.67.6 sybase_fetch_field
object sybase_fetch_field (int result, int field_offset)
Retourne un objet contenant les informations du champs.
Voir aussi sybase_field_seek().
10.67.7 sybase_fetch_object
int sybase_fetch_object (int result)
Retourne un objet qui contient la ligne demandée, en cas de succès, et
FALSE en cas d'erreur.
10.67.8 sybase_fetch_row
array sybase_fetch_row (int result)
Retourne un tableau qui contient la ligne demandée, en cas de succès, et
FALSE en cas d'erreur.
10.67.9 sybase_field_seek
int sybase_field_seek (int result, int field_offset)
Modifie l'index d'un champs. Le prochain appel à la fonction
sybase_fetch_field() sans préciser l'index du champs
retournera ce champs.
10.67.10 sybase_free_result
int sybase_free_result (int result)
sybase_free_result() n'est vraiment utile que si vous
risquez d'utiliser trop de mémoire durant votre script. La mémoire occupée par
les résultats est automatiquement libérée à la fin du script. Mais, si vous êtes
sûr de ne pas avoir besoin du résultat ultérieurement.
10.67.11 sybase_num_fields
int sybase_num_fields (int result)
sybase_num_fields() retourne le nombre de champs dans un
résultat.
10.67.12 sybase_num_rows
int sybase_num_rows (string result)
sybase_num_rows() retourne le nombre de lignes dans un
résultat.
10.67.13 sybase_pconnect
int sybase_pconnect (string servername, string username, string password)
Retourne un identifiant de connexion positive en cas de succès, et
FALSE en cas d'erreur.
10.67.14 sybase_query
int sybase_query (string query, int link_identifier)
Retourne un identifiant de résultat positif en cas de succès, et FALSE sinon.
10.67.15 sybase_result
int sybase_result (int result, int i, mixed field)
sybase_result() retourne le contenu d'une cellule. L'argument
field peut être l'index du champs, ou bien le nom du
champs, ou encore, le nom de la table " point " le nom du champs. Si la colonne
a été aliasée ('SELECT foo AS bar FROM...'), utilisez l'alias à la place du nom
de la colonne.
10.67.16 sybase_select_db
int sybase_select_db (string database_name, int link_identifier)
Retourne TRUE en cas de succès, et FALSE en cas d'erreur.
10.68 ODBC
10.68.1 odbc_autocommit
int odbc_autocommit (int connection_id, int OnOff)
Sans paramètre OnOff, cette fonction retourne le statut
d'auto-validation de la connexion connection_id.
TRUE si le mode est activé, FALSE si il ne l'est pas, ou si une erreur survient.
10.68.2 odbc_binmode
int odbc_binmode (int result_id, int mode)
Types ODBC SQL affectés: BINARY, VARBINARY, LONGVARBINARY.
Lorsqu'une donnée SQL est convertie en caractère C, les 8 bits du caractère source sont représentés par deux caractères ASCII. Ces caractères sont des représentations ASCII des nombres au format hexadécimal. Par exemple, le binaire 00000001 est converti en "01" et le binaire 11111111 est converti en "FF".
Si result_id vaut 0, ces paramètres seront appliqués aux nouveaux résultats. Note : La valeur par défaut de 4096 est 4096 et les valeurs par défaut de odbc_binmode est ODBC_BINMODE_RETURN. La gestion des colonnes binaires est aussi modifié par odbc_longreadlen(). 10.68.3 odbc_close
void odbc_close (int connection_id)
odbc_close() ferme la connexion avec une source de données,
représentée par l'identifiant de connexion.
Note :
Cette fonction échouera si il y a des transactions en cours sur cette connexion.
Dans ce cas, la connexion restera ouverte.
10.68.4 odbc_close_all
void odbc_close_all
odbc_close_all() ferme toutes les connexions ODBC à des
sources de données.
Note :
Cette fonction échouera si il y a des transactions en cours sur cette connexion.
Dans ce cas, la connexion restera ouverte.
10.68.5 odbc_commit
int odbc_commit (int connection_id)
Retourne: TRUE en case de succès, FALSE en cas d'erreur. Toutes les connexions en
cours sur connection_id sont validées.
Toutes les connexions en cours sur connection_id sont
validées.
10.68.6 odbc_connect
int odbc_connect (string dsn, string user, string password, int cursor_type)
Retourne un identifiant de connexion ODBC ou 0 (FALSE) en cas d'erreur.
10.68.7 odbc_cursor
string odbc_cursor (int result_id)
odbc_cursor() lit le pointeur de fiche courante
(cursorname) pour le résultat result_id.
10.68.8 odbc_do
string odbc_do (int conn_id, string query)
odbc_do() excécute la requête query
avec la connexion conn_id.
10.68.9 odbc_exec
int odbc_exec (int connection_id, string query_string)
Retourne FALSE en cas d'erreur. Retourne un identifiant de résultat ODBC en cas
d'exécution réussie.
10.68.10 odbc_execute
int odbc_execute (int result_id, array parameters_array)
Exécute une requête SQL préparée par odbc_prepare().
Retourne TRUE en cas d'exécution réussie, et FALSE sinon. Le tableau de paramètres
parameters_array ne sert que si vous avez besoin de
paramètres votre requête.
10.68.11 odbc_fetch_into
int odbc_fetch_into (int result_id, int rownumber, array result_array)
Retourne le nombre de colonnes dans le résultat, ou FALSE en cas d'erreur.
result_array doit avoir été passé par référence, mais il
peut être de n'importe quel type, étant donné qu'il sera converti en tableau.
Le tableau contiendra les valeurs des colonnes, ces dernières étant numérotées à
partir de 0.
10.68.12 odbc_fetch_row
int odbc_fetch_row (int result_id, int row_number)
Si odbc_fetch_row() a réussi, TRUE est retourné.
Si il n'y avait plus de ligne, ou en cas d'erreur, FALSE est retourné.
10.68.13 odbc_field_name
string odbc_field_name (int result_id, int field_number)
odbc_field_name() lit le nom de la colonne dont l'index est
field_number. La numérotation des champs commence à 1.
FALSE est retourné en cas d'erreur.
10.68.14 odbc_field_type
string odbc_field_type (int result_id, int field_number)
odbc_field_type() retourne le type de données SQL d'un champs,
identifié par son index. La numérotation des champs commence à 1.
10.68.15 odbc_field_len
int odbc_field_len (int result_id, int field_number)
odbc_field_len() retourne la longueur du champs référence par
le nombre field_number, dans la connexion ODBC
result_id. Les numéros de champs commencent à 1.
10.68.16 odbc_field_precision
string odbc_field_precision (int result_id, int field_number)
odbc_field_precision() retourne la précision
du champs numéro field_number, dans le
résultat identifié par result_id.
10.68.17 odbc_field_scale
string odbc_field_scale (int result_id, int field_number)
odbc_field_precision() retourne la taille
du champs référencé par field_number dans
le résultat result_id.
10.68.18 odbc_free_result
int odbc_free_result (int result_id)
Retourne toujours TRUE. 10.68.19 odbc_longreadlen
int odbc_longreadlen (int result_id, int length)
Types ODBC SQL affectés: LONG, LONGVARBINARY.
10.68.20 odbc_num_fields
int odbc_num_fields (int result_id)
odbc_num_fields() retourne le nombre de colonnes dans un
résultat ODBC. Cette fonction retournera -1 en cas d'erreur. L'argument est un
identifiant de résultat valide, retourné par odbc_exec().
10.68.21 odbc_pconnect
int odbc_pconnect (string dsn, string user, string password, int cursor_type)
Retourne un identifiant de connexion ODBC ou 0 (FALSE) en cas d'erreur.
Cette fonction se comporte de manière similaire à odbc_connect(),
mais la connexion ouverte n'est pas vraiment terminée lorsque le script est
terminé. Les prochaînes requêtes qui se feront sur une connexion dont
les dsn, user,
password sont les mêmes que celle-ci (avec
odbc_connect() et odbc_pconnect())
réutiliseront la connexion ouverte.
10.68.22 odbc_prepare
int odbc_prepare (int connection_id, string query_string)
Prépare une commande pour l'exécution. 10.68.23 odbc_num_rows
int odbc_num_rows (int result_id)
odbc_num_rows() retourne le nombre de lignes dans un résultat
ODBC. Cette fonction retournera -1 en cas d'erreur. Pour les commandes INSERT,
UPDATE et DELETE, odbc_num_rows() retourne le nombre de ligne
affectées. Pour les commandes SELECT, ce PEUT le nombre de
lignes disponibles, mais ce n'est pas certains.
10.68.24 odbc_result
string odbc_result (int result_id, mixed field)
Retourne le contenu d'un champs.
$item_3 = odbc_result($Query_ID, 3 ); $item_val = odbc_result($Query_ID, "val");
10.68.25 odbc_result_all
int odbc_result_all (int result_id, string format)
Retourne le nombre de lignes dans le résultat, ou FALSE en cas d'erreur.
10.68.26 odbc_rollback
int odbc_rollback (int connection_id)
Annule toutes les transactions sur la connexion
connection_id. Retourne TRUE en cas de succès, et
FALSE en cas d'echec.
10.68.27 odbc_setoption
int odbc_setoption (int id, int function, int option, int param)
Cette fonction donne accès aux options ODBC pour une connexion particulière
ou un résultat de requête. Elle a été écrite pour aider à la résolution de
problème liés aux pilotes ODBC récalcitrants. Vous aurez sûrement à utiliser
cette fonction si vous êtes un programmeur ODBC et que vous comprenez les divers
effets des options disponibles. Vous aurez aussi besoin d'un bon manuel de
référence pour comprendre les options et leur usage. Différentes versions de
pilotes supportent différentes versions d'options.
// 1. L'option 102 de SQLSetConnectOption() est SQL_AUTOCOMMIT. // 1 de SQL_AUTOCOMMIT est SQL_AUTOCOMMIT_ON. // Cet exemple a le meme effet que // odbc_autocommit($conn, TRUE); odbc_setoption ($conn, 1, 102, 1); // 2. Option 0 de SQLSetStmtOption() est SQL_QUERY_TIMEOUT. // Cet exemple fixe le délai d'expiration à 30 secondes. $result = odbc_prepare ($conn, $sql); odbc_setoption ($result, 2, 0, 30); odbc_execute ($result);
10.68.28 odbc_tables
int odbc_tables (int connection_id, string qualifier, string owner, string name, string types)
Liste toutes les tables sur la connexion connection_id.
Retourne un identifiant de résultat ODBC ou bien false
en cas d'échec.
10.68.29 odbc_tableprivileges
int odbc_tableprivileges (int connection_id, string qualifier, string owner, string name)
Liste les tables de la source de données connection_id,
ainsi que les droits associés. Retourne un identifiant de résultat
ODBC ou bien false en cas d'échec.
10.68.30 odbc_columns
int odbc_columns (int connection_id, string qualifier, string owner, string table_name, string column_name)
Liste toutes les colonnes de la table table_name.
s all columns in the requested range. Retourne un identifiant de résultat
ODBC ou bien false en cas d'échec.
10.68.31 odbc_columnprivileges
int odbc_columnprivileges (int connection_id, string qualifier, string owner, string table_name, string column_name)
Liste les colonnes de la table table_name et
leurs droits associés. Retourne un identifiant de résultat ODBC, ou bien
false en cas d'erreur.
10.68.32 odbc_gettypeinfo
int odbc_gettypeinfo (int connection_id, int data_type)
Liste les types de données supportés par la source de données
connection_id. Retourne un identifiant de
résultat ODBC, ou false en cas d'erreur. L'argument optionnel
data_type permet de restreintre les
informations à un type unique de données.
10.68.33 odbc_primarykeys
int odbc_primarykeys (int connection_id, string qualifier, string owner, string table)
Liste les colonnes d'une table qui font partie d'une clé
primaire. Retourne un identifiant de
résultat ODBC, ou false en cas d'erreur.
10.68.34 odbc_foreignkeys
int odbc_foreignkeys (int connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)
odbc_foreignkeys() lit les informations concernant
les clés étrangères. Retourne un identifiant de
résultat ODBC, ou false en cas d'erreur.
10.68.35 odbc_procedures
int odbc_procedures (int connection_id, string qualifier, string owner, string name)
Liste toutes les procedures de la source de données connection_id.
Retourne un identifiant de résultat ODBC, ou false en cas d'erreur.
10.68.36 odbc_procedurecolumns
int odbc_procedurecolumns (int connection_id, string qualifier, string owner, string proc, string column)
Liste les paramètres et les valeurs de sortie, ainsi que les colonnes
qui permettent l'exécution d'une procédure.
Retourne un identifiant de résultat ODBC, ou false en cas d'erreur.
10.68.37 odbc_specialcolumns
int odbc_specialcolumns (int connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)
Lorsque le type d'argument est SQL_BEST_ROWID,
odbc_specialcolumns() retourne la colonne ou
les colonnes qui définissent uniquement chaque ligne de la table.
10.68.38 odbc_statistics
int odbc_statistics (int connection_id, string qualifier, string owner, string table_name, int unique, int accuracy)
Liste les statistiques d'une table et ses index. Retourne un identifiant de
résultat ODBC, ou false en cas d'erreur.
10.69 URL
10.69.1 base64_decode
string base64_decode (string encoded_data)
base64_decode() décode encoded_data
et retourne les données décodées. Les informations initiales peuvent être
binaires.
10.69.2 base64_encode
string base64_encode (string data)
base64_encode() retourne data encodé en
base64. Cet encodage est fait pour permettre aux informations binaires d'être
manipulées par les systèmes qui ne gèrent pas correctement les 8 bits, comme par
exemple, les corps de mail.
10.69.3 parse_url
array parse_url (string url)
parse_url() retourne un tableau associatif contenant les
composants de l'URL. Les composants recherchés sont : "scheme", "host", "port",
"user", "pass", "path", "query", et "fragment".
10.69.4 rawurldecode
string rawurldecode (string str)
rawurldecode() éécode toutes les séquences
%## et les remplace par leur valeur.
La chaîne ainsi décodée est retournée.
10.69.5 rawurlencode
string rawurlencode (string str) Retourne une chaîne dont les caractères non-alphanumériques (hormis -_.) sont remplacés par des séquences commencant par un caractère pourcentage (%), suivi de deux chiffres hexadécimaux. Les espaces sont remplacés par des signes plus (+). Ce codage est celui qui est utilisé pour poster des informations dans les formulaires HTML. Le type MIMIE est application/x-www-form-urlencoded. Ce codage est différent de celui spécifié dans la RFC1738 (voir rawurlencode()) : pour des raisons historiques, les espaces sont remplacés par des signes plus (+). Cette fonction est pratique pour transmettre des informations via une URL. C'est aussi un moyen de passer des informations d'une page à l'autre. Par exemple si vous voulez envoyer un mot de passe FTP dans une URL : Exemple rawurlencode() echo '<A HREF="ftp://user:', rawurlencode ('foo @+%/'), '@ftp.my.com/x.txt">'; Ou bien, si vous passez des informations dans le chemin de l'URL : Exemple rawurlencode() echo '<A HREF="http://x.com/department_list_script/', rawurlencode ('ventes et marketing/Marseille'), '">';
10.69.6 urldecode
string urldecode (string str) Décode toutes les séquences %## et les remplace par leur valeur. La chaîne ainsi décodée est retournée. Exemple avec urldecode() $a = split ('&', $querystring); $i = 0; while ($i < count ($a)) { $b = split ('=', $a [$i]); echo 'Value for parameter ', htmlspecialchars (urldecode ($b [0])), ' is ', htmlspecialchars (urldecode ($b [1])), "<BR>"; $i++; }
10.69.7 urlencode
string urlencode (string str) Retourne une chaîne dont les caractères non-alphanumériques (hormis -_.) sont remplacés par des séquences commencant par un caractère pourcentage (%), suivi de deux chiffres hexadécimaux. Les espaces sont remplacés par des signes plus (+). Ce codage est celui qui est utilisé pour poster des informations dans les formulaires HTML. Le type MIMIE est application/x-www-form-urlencoded. Ce codage est différent de celui spécifié dans la RFC1738 (voir rawurlencode()) : pour des raisons historiques, les espaces sont remplacés par des signes plus (+). Cette fonction est pratique pour transmettre des informations via une URL. C'est aussi un moyen de passer des informations d'une page à l'autre. Exemple avec urlencode() echo '<A HREF="mycgi?foo=', urlencode ($userinput), '">';
10.70 Variables
10.70.1 doubleval
double doubleval (mixed var)
Retourne la valeur numérique (double) de la variable var.
$var = '122.34343The'; $double_value_of_var = doubleval($var); print $double_value_of_var; // affiche 122.34343
10.70.2 empty
int empty (mixed var) Retourne la valeur FALSE si la variable var est affectée ou bien a une valeur différente de 0; la valeur TRUE dans les autres cas. $var = 0; if (empty($var)) { #retourne TRUE print 'soit $var vaut 0, soit il n'est pas défini'; } if (!isset($var)) { // retourne FALSE print '$var n'est pas définie'; }
10.70.3 gettype
string gettype (mixed var)
Retourne le type de la variable PHP var.
10.70.4 intval
int intval (mixed var, int base )
Retourne la valeur numérique (integer) de la variable var,
en convertisant la valeur dans la base spécifiée (par défaut en base 10).
10.70.5 is_array
int is_array (mixed var)
Renvoie la valeur TRUE si la variable var est un tableau,
FALSE sinon.
10.70.6 is_bool
int is_bool (mixed var )
Retourne true si var est un booléen.
10.70.7 is_double
int is_double (mixed var)
Renvoie TRUE si la variable var est du type "double",
FALSE sinon.
10.70.8 is_float
int is_float (mixed var)
Cette fonction est un alias de la fonction is_double().
10.70.9 is_int
int is_int (mixed var)
Cette fonction est un alias de la fonction is_long().
10.70.10 is_integer
int is_integer (mixed var)
Cette fonction est un alias de la fonction is_long().
10.70.11 is_long
int is_long (mixed var)
Renvoie TRUE si la variable var est du type integer (long),
FALSE sinon.
10.70.12 is_numeric
int is_numeric (mixed var)
Retourne true si var est un nombre ou une
chaîne numérique.
10.70.13 is_object
int is_object (mixed var)
Renvoie TRUE si la variable var est un objet,
FALSE sinon.
10.70.14 is_real
int is_real (mixed var)
Cette fonction est un alias de la fonction is_double().
10.70.15 is_resource
int is_resource (mixed var )
is_resource() retourne TRUE si var
est une ressource, sinon retourne false.
10.70.16 is_string
int is_string (mixed var)
Renvoie TRUE si la variable var est du type "string",
FALSE sinon.
10.70.17 isset
int isset (mixed var)
Renvoie TRUE si la variable var est définie,
FALSE sinon.
$a = "test"; echo isset ($a); // TRUE unset ($a); echo isset ($a); // FALSE
10.70.18 print_r
void print_r (mixed expression)
Cette fonction affiche des informations à propos d'une variable, de manière à
ce qu'elle soit lisible. Pour une chaîne, un entier ou un double, la valeur
sera elle même sera affichée. Pour les tableaux, les valeurs seront présentées
dans un format qui montre les clés et les valeurs. Une notation similaire est
disponible pour les objets.
<?php $a = array (1, 2, array ("a", "b", "c")); print_r ($a); ?>
10.70.19 serialize
string serialize (mixed value)
serialize() retourne une version stockable d'une
variable linéarisée de value qui peut être
stockées n'importe où (fichier, base de données...).
// $session_data contient un tableau multi-dimensionnel contenant des informations // de session concernant l'utilisateur courant. On peut utiliser serialize() pour // le sauver dans une base de données $conn = odbc_connect ("base_de_donnees_web", "php", "toto"); $stmt = odbc_prepare ($conn, "UPDATE sessions SET data = ? WHERE id = ?"); $sqldata = array (serialize($session_data), $PHP_AUTH_USER); if (!odbc_execute ($stmt, &$sqldata)) { $stmt = odbc_prepare($conn, "INSERT INTO sessions (id, data) VALUES(?, ?)"); if (!odbc_execute($stmt, &$sqldata)) { /* Un insecte! Enfer et damnation! Grmbm!?!. */ } }
10.70.20 settype
int settype (string var, string type)
Affecte le type type à la variable var.
10.70.21 strval
string strval (mixed var)
Retourne la valeur de la variable var,
au format chaîne de caractères.
10.70.22 unserialize
mixed unserialize (string str)
unserialize() prend une variable linéarisée
(voir serialize()) et la converti en variable PHP.
La valeur convertie est retournée, et peut être de type
// Ici, on utilise unserialize() pour charger des données de session depuis une // base de données dans $session_data. Cet exemple complète celui commencé // dans serialize(). $conn = odbc_connect ("base_de_donnees_web", "php", "toto"); $stmt = odbc_prepare ($conn, "SELECT data FROM sessions WHERE id = ?"); $sqldata = array ($PHP_AUTH_USER); if (!odbc_execute ($stmt, &$sqldata) || !odbc_fetch_into ($stmt, &$tmp)) { // Si l'exécution ou la lecture échoue, initialise à vide. $session_data = array(); } else { // Maintenant, les données linéarisée sont dans $tmp[0]. $session_data = unserialize ($tmp[0]); if (!is_array ($session_data)) { // Quelque chose ne va pas. Initialisation à tableau vide. $session_data = array(); } }
10.70.23 unset
int unset (mixed var)
unset() désaffecte la variable var et
renvoie TRUE.
unset ($foo); unset ($bar['quux']);
10.70.24 var_dump
void var_dump (mixed expression)
Cette fonction retourne les informations structurées d'une variable,
y compris son type et sa valeur. Les tableaux sont explorés
récursivement, avec des indentations, pour mettre en valeur leur structure.
<pre> <?php $a = array (1, 2, array ("a", "b", "c")); var_dump ($a); ?> </pre>
10.71 Vmailmgr
Ces fonctions requièrent qmail et le
vmailmgr package package de Bruce Guenter.
<?php dl("php3_vmailmgr.so"); //charge la librairie $vdomain="vdomain.com"; $basepwd="password"; ?>
10.71.1 vm_adduser
int vm_adduser (string vdomain, string basepwd, string newusername, string newuserpassword)
Ajoute une nouvel utilisateur virtuel newusername,
avec le mot de passe newuserpassword.
10.71.2 vm_addalias
int vm_addalias (string vdomain, string basepwd, string username, string alias)
Ajoute un nouvel alias vers un utilisateur virtuel.
username est le nom du compte email, et
alias est un alias pour cet utilisateur.
10.71.3 vm_passwd
int vm_passwd (string vdomain, string username, string password, string newpassword)
Change le mot de passe d'utilisateurs virtuels. username
est le nom de compte email, password
est l'ancien mot de passe de l'utilisateur, et newpassword
son nouveau mot de passe.
10.71.4 vm_delalias
int vm_delalias (string vdomain, string basepwd, string alias)
Supprime un alias.
10.71.5 vm_deluser
int vm_deluser (string vdomain, string username)
Supprime un utilisateur virtuel.
10.72 WDDX functions
Ces fonctions opèrent avec l'aide de WDDX.
<?php print wddx_serialize_value("Exemple de paquet de PHP à WDDX ", "Paquet PHP"); ?>
<wddxPacket version='0.9'><header comment='Paquet PHP'/><data> <string>Exemple de paquet de PHP à WDDX</string></data></wddxPacket> Utilisation de paquets incrémentaux <?php $pi = 3.1415926; $packet_id = wddx_packet_start("PHP"); wddx_add_vars($packet_id, "pi"); /* Supposons que $villes provient d'une base de données */ $cities = array("Paris", "Marseilles", "Lyon"); wddx_add_vars($packet_id, " villes "); $packet = wddx_packet_end($packet_id); print $packet; ?>
<wddxPacket version='0.9'><header comment='PHP'/><data><struct> <var name='pi'><number>3.1415926</number></var><var name='cities'> <array length='3'><string>Paris</string><string>Marseilles</string> <string>Lyon</string></array></var></struct></data></wddxPacket>
10.72.1 wddx_serialize_value
string wddx_serialize_value (mixed var, string comment)
wddx_serialize_value() sert à créer un paquet WDDX à partir
d'une seule valeur. Cette fonction prend la valeur de var,
et un argument optionnel comment qui apparaîtra dans
l'entête du paquet, et retourne un paquet WDDX.
10.72.2 wddx_serialize_vars
string wddx_serialize_vars (mixed var_name, mixed ... )
wddx_serialize_vars() sert à créer un paquet WDDX avec une
structure qui contient la représentation des variables passées en arguments.
<?php $a = 1; $b = 5.5; $c = array("bleu", "orange", "violet"); $d = "colors"; $clvars = array("c", "d"); print wddx_serialize_vars("a", "b", $clvars); ?>
<wddxPacket version='0.9'><header/><data><struct><var name='a'><number>1</number></var> <var name='b'><number>5.5</number></var><var name='c'><array length='3'> <string>bleu</string><string>orange</string><string>violet</string></array></var> <var name='d'><string>colors</string></var></struct></data></wddxPacket>
10.72.3 wddx_packet_start
int wddx_packet_start (string comment)
wddx_packet_start() sert à créer un nouveau paquet WDDX,
pour pouvoir y faire des ajouts incrémentaux de variables. Cette fonction prend
un argument optionel comment et retourne un identifiant
de paquet, qui servira à d'autres fonctions. Elle va automatiquement créer
une définition de structure dans le paquet, pour accueillir des variables.
10.72.4 wddx_packet_end
string wddx_packet_end (int packet_id)
wddx_packet_end() () clos un paquet WDDX repéré par son
identifiant packet_id.
10.72.5 wddx_add_vars
wddx_add_vars (int packet_id, mixed name_var, mixed ... )
wddx_add_vars() sert à enregistrer les variables passées en
argument, et les ajouter au paquet repéré par son identifiant
packet_id.
Les variables enregistrées sont spécifiées de la même façon que pour
wddx_serialize_vars().
10.72.6 wddx_deserialize
mixed wddx_deserialize (string packet)
wddx_deserialize() prend une chaîne packet et la lit. Cette
fonction retourne un résultat qui peut être une chaîne, un nombre ou un tableau.
Notez que les structures sont lues sous la forme de tableau associatifs.
10.73 Analyseur syntaxique XML
10.73.1 Introduction
10.73.1.1 A propos de XML
Le langage XML (eXtensible Markup Language (Langage à Balises Etendu)) est
un format structuré de données pour les échanges sur le web. C'est un standard
défini par le consortium World Wide Web (W3C). Plus d'informations à propos
du XML et des technologies afférentes sont accessibles (en anglais)
http://www.w3.org/XML/.
10.73.1.2 Installation
Cette extension de PHP utilise expat, disponible à http://www.jclark.com/xml/. Le fichier Makefile livré avec expat ne construit pas par défaut de librairie : il faut utiliser la ligne suivante : libexpat.a: $(OBJS) ar -rc $ $(OBJS) ranlib $
Les sources de expat sont disponibles à
http://www.guardian.no/~ssb/phpxml.html.
10.73.1.3 A propos de cette extension :
Cette extension PHP supporte la librairie expat de
James Clark sous PHP. Cela vous permettra d'analyser mais pas de valider les
documents XML. Il supporte trois types de codage différents, disponibles aussi
sous PHP:
US-ASCII, ISO-8859-1 et UTF-8.
UTF-16 n'est pas supporté.
10.73.1.4 Problèmes de casse
Les fonctions de gestion des balises peuvent rencontrer des balises en
minuscule, majuscule ou encore dans un mélange des deux. En XML, la procédure
standard est d' "identifier les séquences de caractère qui ne sont pas
reconnues comme majuscule, et de les remplacer par leur équivalent majuscule".
En d'autres termes, XML met toutes lettres en majuscules.
10.73.1.5 Error Codes
Les constantes suivantes sont définies comme des codes d'erreurs XML : (retournée par xml_parse()):
10.73.1.6 Codage des caractères
L'extension XML de PHP supporte les caractères
Unicode grâce à différents codages. Il y
a deux types de codages de caractères : le codage à la source et le codage à la
cible. PHP utilise le UTF-8 comme représentation interne.
10.73.2 Quelques exemples
Voici une liste d'exemple de code PHP qui analyse un document XML.
10.73.2.1 Exemple de structure XML
Ce premier exemple affiche la structure de l'élément de début dans un document avec indentation/ Afficher une structure XML $file = "data.xml"; $depth = array(); function startElement($parser, $name, $attrs) { global $depth; for ($i = 0; $i < $depth[$parser]; $i++) { print " "; } print "$name\n"; $depth[$parser]++; } function endElement($parser, $name) { global $depth; $depth[$parser]--; } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); if (!($fp = fopen($file, "r"))) { die("could not open XML input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser);
10.73.2.2 XML Transtypage XML -> HTML
Cet exemple remplace les balises XML d'un document par des balises HTML. Les éléments inconnus seront ignorés. Bien entendu, cet exemple sera appliqué à un type précis de fichiers XML.$file = "data.xml"; $map_array = array( "BOLD" => "B", "EMPHASIS" => "I", "LITERAL" => "TT" ); function startElement($parser, $name, $attrs) { global $map_array; if ($htmltag = $map_array[$name]) { print "<$htmltag>"; } } function endElement($parser, $name) { global $map_array; if ($htmltag = $map_array[$name]) { print "</$htmltag>"; } } function characterData($parser, $data) { print $data; } $xml_parser = xml_parser_create(); // use case-folding so we are sure to find the tag in $map_array xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, TRUE); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); if (!($fp = fopen($file, "r"))) { die("could not open XML input"); } while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser);
10.73.2.3 XML Entitée externe
Cet exemple exploite les références externes de XML : il est possible d'utiliser un gestionnaire d'entité externe pour inclure et analyser les documents, tous comme les instructions exécutables peuvent servir à inclure et analyser d'autres documents, et aussi fournir une indication de confiance (voir plus bas).
$file = "xmltest.xml"; function trustedFile($file) { // only trust local files owned by ourselves if (!eregi("^([a-z]+)://", $file) && fileowner($file) == getmyuid()) { return TRUE; } return FALSE; } function startElement($parser, $name, $attribs) { print "<<font color=\"#0000cc\">$name</font>"; if (sizeof($attribs)) { while (list($k, $v) = each($attribs)) { print " <font color=\"#009900\">$k</font>=\"<font color=\"#990000\">$v</font>\""; } } print ">"; } function endElement($parser, $name) { print "</<font color=\"#0000cc\">$name</font>>"; } function characterData($parser, $data) { print "<b>$data</b>"; } function PIHandler($parser, $target, $data) { switch (strtolower($target)) { case "php": global $parser_file; // If the parsed document is "trusted", we say it is safe // to execute PHP code inside it. If not, display the code // instead. if (trustedFile($parser_file[$parser])) { eval($data); } else { printf("Untrusted PHP code: <i>%s</i>", htmlspecialchars($data)); } break; } } function defaultHandler($parser, $data) { if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") { printf('<font color="#aa00aa">%s</font>', htmlspecialchars($data)); } else { printf('<font size="-1">%s</font>', htmlspecialchars($data)); } } function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId, $publicId) { if ($systemId) { if (!list($parser, $fp) = new_xml_parser($systemId)) { printf("Could not open entity %s at %s\n", $openEntityNames, $systemId); return FALSE; } while ($data = fread($fp, 4096)) { if (!xml_parse($parser, $data, feof($fp))) { printf("XML error: %s at line %d while parsing entity %s\n", xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser), $openEntityNames); xml_parser_free($parser); return FALSE; } } xml_parser_free($parser); return TRUE; } return FALSE; } function new_xml_parser($file) { global $parser_file; $xml_parser = xml_parser_create(); xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_set_character_data_handler($xml_parser, "characterData"); xml_set_processing_instruction_handler($xml_parser, "PIHandler"); xml_set_default_handler($xml_parser, "defaultHandler"); xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler"); if (!($fp = @fopen($file, "r"))) { return FALSE; } if (!is_array($parser_file)) { settype($parser_file, "array"); } $parser_file[$xml_parser] = $file; return array($xml_parser, $fp); } if (!(list($xml_parser, $fp) = new_xml_parser($file))) { die("could not open XML input"); } print "<pre>"; while ($data = fread($fp, 4096)) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf("XML error: %s at line %d\n", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } print "</pre>"; print "parse complete\n"; xml_parser_free($xml_parser); ?> <?xml version='1.0'?> <!DOCTYPE chapter SYSTEM "/just/a/test.dtd" [ <!ENTITY plainEntity "FOO entity"> <!ENTITY systemEntity SYSTEM "xmltest2.xml"> ]> <chapter> <TITLE>Title &plainEntity;</TITLE> <para> <informaltable> <tgroup cols="3"> <tbody> <row><entry>a1</entry><entry morerows="1">b1</entry><entry>c1</entry></row> <row><entry>a2</entry><entry>c2</entry></row> <row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row> </tbody> </tgroup> </informaltable> </para> &systemEntity; <sect1 id="about"> <title>About this Document</title> <para> <!-- this is a comment --> <?php print 'Hi! This is PHP version '.phpversion(); ?> </para> </sect1> </chapter>
<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY testEnt "test entity"> ]> <foo> <element attrib="value"/> &testEnt; <?php print "This is some more PHP code being executed."; ?> </foo>
10.73.3 xml_parser_create
int xml_parser_create (string encoding )
Cette fonction crée un analyseur XML et retourne une référence sur cet
analyseur pour qu'il puisse être utilisé ultérieurement par d'autres fonctions
XML. Retourne TRUE ou FALSE.
10.73.4 xml_set_object
void xml_set_object (int parser, object &object)
Cette fonction rend l'analyseur parser
utilisable depuis un objet. Toutes les méthodes de callback, affectées par
xml_set_element_handler(), seront les méthodes de cet objet.
<?php class xml { var $parser; function xml() { $this->parser = xml_parser_create(); xml_set_object($this->parser,&$this); xml_set_element_handler($this->parser,"tag_open","tag_close"); xml_set_character_data_handler($this->parser,"cdata"); } function parse($data) { xml_parse($this->parser,$data); } function tag_open($parser,$tag,$attributes) { var_dump($parser,$tag,$attributes); } function cdata($parser,$cdata) { var_dump($parser,$cdata); } function tag_close($parser,$tag) { var_dump($parser,$tag); } } // fin de la classe xml $xml_parser = new xml(); $xml_parser->parse("<A ID=\"hallo\">PHP</A>"); ?>
Note :
xml_set_object() a été ajouté dans PHP 4.0.
10.73.5 xml_set_element_handler
int xml_set_element_handler (int parser, string startElementHandler , string endElementHandler )
Affecte les gestionnaires de début et de fin de l'analyseur XML
parser. startElementHandler et
endElementHandler sont des chaînes qui contiennent les
noms de fonctions qui existent lorsque xml_parse() est appelé
pour créer parser.
10.73.6 xml_set_character_data_handler
int xml_set_character_data_handler (int parser, string handler)
Affecte les gestionnaires de début et de fin de l'analyseur XML
parser. handler est une chaîne qui
contient le nom d'une fonction qui existe lorsque xml_parse()
est appelé pour créer parser.
10.73.7 xml_set_processing_instruction_handler
int xml_set_processing_instruction_handler (int parser, string handler)
Affecte les gestionnaires d'instructions exécutables de l'analyseur XML
parser. handler est une chaîne
qui contient le nom d'une fonction qui existe lorsque xml_parse()
est appelé pour créer parser.
<? target data?>
Vous pouvez mettre du code PHP entre ces balises, mais soyez conscient d'une
des limitations des instructions exécutables de XML : la balise de fin
d'instruction éxécutable (?>) ne peut être échappée, ce
qui fait que cette séquence NE DOIT JAMAIS apparaître dans le code PHP placé
dans le document PHP. Si un tel texte apparaît, la balise de fin d'instruction
exécutable sera reconnue, et le reste du code sera considéré comme des données
brutes (et donc, pas exécutées).
10.73.8 xml_set_default_handler
int xml_set_default_handler (int parser, string handler)
Affecte le gestionnaire par défaut de l'analyseur XML
parser. handler est une chaîne qui
contient le nom d'une fonction qui existe lorsque xml_parse()
est appelé pour créer parser.
10.73.9 xml_set_unparsed_entity_decl_handler
int xml_set_unparsed_entity_decl_handler (int parser, string handler)
Affecte les gestionnaires d'entité non déclaré de l'analyseur XML
parser. handler est une chaîne qui
contient le nom d'une fonction qui existe lorsque xml_parse()
est appelé pour créer parser.
<!ENTITY name {publicId | systemId} NDATA notationName>
10.73.10 xml_set_notation_decl_handler
int xml_set_notation_decl_handler (int parser, string handler)
Affecte les gestionnaires de début et de fin de l'analyseur XML
parser. handler est une chaîne qui
contient le nom d'une fonction qui existe lorsque xml_parse()
est appelé pour créer parser.
<!NOTATION name {systemId | publicId}>
Reportez vous à la section 4.2.2 des
spécifications XML 1.0 pour connaître les notations des entités externes.
10.73.11 xml_set_external_entity_ref_handler
int xml_set_external_entity_ref_handler (int parser, string handler)
Fixe le gestionnaire d'entité externe de l'analyseur XML
parser. handler et
endElementHandler sont des chaînes qui contiennent les
noms de fonction qui existent lorsque xml_parse() est appelé
pour créer le parser.
10.73.12 xml_parse
int xml_parse (int parser, string data, int isFinal )
10.73.13 xml_get_error_code
int xml_get_error_code (int parser)
10.73.14 xml_error_string
string xml_error_string (int code)
10.73.15 xml_get_current_line_number
int xml_get_current_line_number (int parser)
10.73.16 xml_get_current_column_number
int xml_get_current_column_number (int parser)
10.73.17 xml_get_current_byte_index
int xml_get_current_byte_index (int parser)
10.73.18 xml_parse_into_struct
int xml_parse_into_struct (int parser, string data, array &values, array &index)
xml_parse_into_struct() analyse un fichier XML
et range les valeurs dans deux structures tableaux paralelles : la première
(index) contient les pointeurs sur les localisations
des valeurs dans le deuxième tableau values.
Ces deux tableaux doivent être passés par référence.
$simple = "<para><note>simple note</note></para>"; $p = xml_parser_create(); xml_parse_into_struct($p,$simple,&$vals,&$index); xml_parser_free($p); echo "Index array\n"; print_r($index); echo "\nVals array\n"; print_r($vals); Lorsqu'on exécute ce code, le résultat est le suivant : Index array Array ( [PARA] => Array ( [0] => 0 [1] => 2 ) [NOTE] => Array ( [0] => 1 ) ) Vals array Array ( [0] => Array ( [tag] => PARA [type] => open [level] => 1 ) [1] => Array ( [tag] => NOTE [type] => complete [level] => 2 [value] => simple note ) [2] => Array ( [tag] => PARA [type] => close [level] => 1 ) )
<?xml version="1.0"?> <moldb> <molecule> <name>Alanine</name> <symbol>ala</symbol> <code>A</code> <type>hydrophobic</type> </molecule> <molecule> <name>Lysine</name> <symbol>lys</symbol> <code>K</code> <type>charged</type> </molecule> </moldb> et voici comment analyser le document, et générer les objets apropriés : parsemoldb.php - analyse moldb.xml et retourne un tableau d'objet moléculaires parsemoldb.php - analyse moldb.xml et retourne un tableau d'objet moléculaires <?php class AminoAcid { var $name; // aa nom var $symbol; // symbole en trois lettres var $code; // code à une lettre var $type; // hydrophobe, chargée ou neutre function AminoAcid ($aa) { foreach ($aa as $k=>$v) $this->$k = $aa[$k]; } } function readDatabase($filename) { // lit la base de données des aminoacides $data = implode("",file($filename)); $parser = xml_parser_create(); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0); xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); xml_parse_into_struct($parser,$data,&$values,&$tags); xml_parser_free($parser); // passe en revue les structures foreach ($tags as $key=>$val) { if ($key == "molecule") { $molranges = $val; // chaque entrées contigue sont les définitions // de la molécule. for ($i=0; $i < count($molranges); $i+=2) { $offset = $molranges[$i] + 1; $len = $molranges[$i + 1] - $offset; $tdb[] = parseMol(array_slice($values, $offset, $len)); } } else { continue; } } return $tdb; } function parseMol($mvalues) { for ($i=0; $i < count($mvalues); $i++) $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"]; return new AminoAcid($mol); } $db = readDatabase("moldb.xml"); echo "** Base de données d'amino-acides :\n"; print_r($db); ?> Après exécution du fichier `parsemoldb.php', la variable $db contient un tableau de AminoAcid et l'affichage du script le confirme : ** Base de données d'amino-acides: Array ( [0] => aminoacid Object ( [name] => Alanine [symbol] => ala [code] => A [type] => hydrophobic ) [1] => aminoacid Object ( [name] => Lysine [symbol] => lys [code] => K [type] => charged ) )
10.73.19 xml_parser_free
string xml_parser_free (int parser)
10.73.20 xml_parser_set_option
int xml_parser_set_option (int parser, int option, mixed value)
10.73.21 xml_parser_get_option
mixed xml_parser_get_option (int parser, int option)
10.73.22 utf8_decode
string utf8_decode (string data)
Cette fonction décode la chaîne data, en supposant qu'elle
est au format UTF-8, et la convertit au format
ISO-8859-1.
10.73.23 utf8_encode
string utf8_encode (string data) Cette fonction code la chaîne data au format UTF-8, et retourne la version codée. UTF-8 est un mécanisme standardisé utilisé par Unicode pour coder les caractère de grande taille dans des flots d'octets. UTF-8 est transparent pour les caractères ASCII, il est auto-synchronisé (c'est à dire qu'un programme peut toujours savoir dans un flot d'octet oú un caractère commence), et peut être utilisé pour faire des comparaisons de chaînes standard, comme pour le tri. PHP utilise l'UTF-8 pour coder les caractères jusqu'à 4 octets comme ceci :
10.74 YAZ
10.74.1 Introduction
Cette extensions offre à PHP l'interface avec les produits
YAZ, qui implémentent le protocole
Z39.50. Avec cette extension, vous pouvez facilement implémenter
un client Z39.50 qui fouille des serveurs Z39.50 en paralelle.
10.74.2 Installation
Compilez YAZ et installez le. Compilez PHP avec vos modules et ajoutez l'option
--with-yaz. Les instructions sont :
gunzip -c yaz-1.6.tar.gz|tar xf - gunzip -c php-4.0.X.tar.gz|tar xf - cd yaz-1.6 ./configure --prefix=/usr make make install cd ../php-4.0.X ./configure --with-yaz=/usr/bin make make install
10.74.3 Example
PHP/YAZ conserve les connexions aux serveurs. Un entier positif représente
l'ID d'une connexion particulière.
$num_hosts = count ($host); if (empty($term) || count($host) == 0) { echo '<form method="get"> <input type="checkbox" name="host[]" value="bagel.indexdata.dk/gils"> GILS test <input type="checkbox" name="host[]" value="localhost:9999/Default"> local test <input type="checkbox" checked="1" name="host[]" value="z3950.bell-labs.com/books"> BELL Labs Library <br> RPN Query: <input type="text" size="30" name="term"> <input type="submit" name="action" value="Search"> '; } else { echo 'Vous avez recherché ' . htmlspecialchars($term) . '<br>'; for ($i = 0; $i > $num_hosts; $i++) { $id[] = yaz_connect($host[$i]); yaz_syntax($id[$i],"sutrs"); yaz_search($id[$i],"rpn",$term); } yaz_wait(); for ($i = 0; $i < $num_hosts; $i++) { echo '<hr>' . $host[$i] . ":"; $error = yaz_error($id[$i]); if (!empty($error)) { echo "Erreur: $error"; } else { $hits = yaz_hits($id[$i]); echo "Nombre de résultats : $hits"; } echo '<dl>'; for ($p = 1; $p <= 10; $p++) { $rec = yaz_record($id[$i],$p,"string"); if (empty($rec)) continue; echo "<dt><b>$p</b></dt><dd>"; echo ereg_replace("\n", "<br>\n",$rec); echo "</dd>"; } echo '</dl>'; } }
10.74.4 yaz_addinfo
int yaz_addinfo (int id)
Retourne plus de détails après la dernière erreur survenue.
Une chaine vide est retournée si la dernière opération a été
réussie, ou bien si aucune autre information n'est disponible.
10.74.5 yaz_close
int yaz_close (int id)
Ferme une connexion à un hôte YAZ. L'application ne peut plus utiliser
l'identifiant de connexoin id.
10.74.6 yaz_connect
int yaz_connect (string zurl)
yaz_connect() prépare une connexion à un "target"
Z39.50 target. zurl est de la forme
host[:port][/database]. Si port est omis, 210 est utilisé. Si
database est omis, Default est utilisé. Cette fonction n'est pas bloquante,
et ne tente pas d'établir une socket. En fait, elle ne fait que préparer
la connexion pour exécution ultérieure par yaz_wait().
10.74.7 yaz_errno
int yaz_errno (int id)
Retourne le numéro d'erreur de la dernière requête. Une valeur positive est
retournée si le "target" a retournée un diagnostic. La valeur 0 est retournée
si aucune erreur n'est survenue. Une valeur négative indique une erreur
sans diagnostic.
10.74.8 yaz_error
int yaz_error (int id)
Retourne un message d'erreur pour la dernière requête. Une chaîicirc;ne vide est
retournée si la dernière requête a réussi.
10.74.9 yaz_hits
int yaz_hits (int id)
yaz_hits() retourne le nombre de résultat de la dernière recherche.
10.74.10 yaz_range
int yaz_range (int id, int start, int number)
Cette fonction est utilisée conjointement à yaz_search(),
pour spécifier le nombre maximal number de résultat à lire,
ainsi que la position de début de lecture avec start.
Si cette fonction n'est pas utilisée, start vaudra 1
et number vaudra 10.
10.74.11 yaz_record
int yaz_record (int id, int pos, string type)
Retourne un résultatà la position pos, ou une
chaîicirc;ne vide si aucun résultat n'est disponible à la position pos.
10.74.12 yaz_search
int yaz_search (int id, string type, string query)
yaz_search() prépare une recherche sur le "target"
identifié par id. type représente
le type de requête : seul "rpn" est supporté actuellement, et dans ce cas,
le troisième argument est un préfixe de notation de requête utilisé par YAZ.
Comme pour yaz_connect(), cette fonction n'est pas bloquante,
et ne fait que préparer la recherche pour exécution ultérieure, avec
yaz_wait().
10.74.13 yaz_syntax
int yaz_syntax (int id, string syntax)
Cette fonction est utilisée conjointement avec yaz_search()
pour spécifier la méthode de lecture des lignes.
10.74.14 yaz_wait
int yaz_wait (int id, string syntax)
Cette fonction exécute les requêtes préparée par les fonctions
yaz_connect(), yaz_search().
yaz_wait() fonctionne en mode bloquant.
yaz_wait() se termine lorsque toutes les requêtes
se sont terminées (succès ou erreur).
10.75 Zlib (Compression)
Ce module utilise les fonctions de la librairie zlib
( zlib) de Jean-loup Gailly et Mark Adler pour
lire et écrire, de manière transparente, des fichiers compressés avec gzip (.gz).
Il faut utiliser la librairie zlib, de version >= 1.0.9.
10.75.1 Petit exemple
Ouvre un fichier temporaire, écrit un texte et puis affiche deux fois le contenu.
<?php $filename = tempnam('/tmp', 'zlibtest').'.gz'; print "<html>\n<head></head>\n<body>\n<pre>\n"; $s = "Only a test, test, test, test, test, test, test, test!\n"; // ouvre un fichier en écriture, avec compression maximale $zp = gzopen($filename, "w9"); // écrit la chaîne dans le fichier gzwrite($zp, $s); // ferme le fichier gzclose($zp); // ouvre en lecture $zp = gzopen($filename, "r"); // lis 3 caractères print gzread($zp, 3); // Affiche le reste du fichier gzpassthru($zp); print "\n"; // ouvre le fichier, et affiche le contenu (deuxième passe) if (readgzfile($filename) != strlen($s)) { echo "Error with zlib functions!"; } unlink($filename); print "<pre>\n</h1></body>\n</html>\n"; ?> 10.75.2 gzclose
int gzclose (int zp)
gzclose() ferme le pointeur zp.
10.75.3 gzeof
int gzeof (int zp)
Retourne TRUE si le pointeur interne du fichier compressé est à la fin du fichier,
sinon retourne FALSE.
10.75.4 gzfile
array gzfile (string filename, int use_include_path)
Identique à readgzfile(), mais gzfile()
retourne un tableau.
10.75.5 gzgetc
string gzgetc (int zp)
Retourne une chaîne décompressée, qui contient un caractère unique, lu depuis le
fichier référencé par le pointeur zp. Retourne FALSE
à la fin du fichier (voir gzeof()).
10.75.6 gzgets
string gzgets (int zp, int length)
Retourne une chaîne décompressée, de longueur inférieure ou égale à length - 1 octets, lue depuis de fichier référencé par le pointeur de fichier fp. La lecture s'interromp lorsque length - 1 octets ont été lus, ou bien lorsqu'une nouvelle ligne a été rencontrée, ou bien lorsque la fin du fichier a été atteinte.
10.75.7 gzgetss
string gzgetss (int zp, int length, string allowable_tags)
Identique à gzgets(), mais gzgetss essaie de supprimer toutes
les balises HTML et PHP du texte lu.
10.75.8 gzopen
int gzopen (string filename, string mode, int use_include_path)
Ouvre un fichier compressé avec gzip (.gz) pour le lire ou l'écrire.
Le paramètre de mode est le même que dans fopen() ("rb" ou "wb")
mais il peut aussi inclure un niveau de compression ("wb9") ou une stratégie: 'f' pour les données filtrées, comme dans "wb6f", 'h' pour Huffman seul , comme dans "wb1h". (Voir la description de deflateInit2 dans zlib.h pour plus de détails a propos des paramètres de stratégie).
$fp = gzopen("/tmp/file.gz", "r");
10.75.9 gzpassthru
int gzpassthru (int zp)
Lit toutes les informations d'un fichier compressé jusqu'à EOF et écrit le résultat décompressé dans la sortie standard.
10.75.10 gzputs
int gzputs (int zp, string str, int length)
gzputs()est un alias de gzwrite(), et lui est identique en tous points. 10.75.11 gzread
string gzread (int zp, int length)
gzread() lit jusqu'à length octets
depuis le fichier compressé référencé par zp. La
lecture stoppe lorsque length octets décompressés ont été lus,
ou que la fin du fichier a été trouvée.
// lis le contenu d'un fichier compressé et le met dans une chaîne $filename = "/usr/local/something.txt.gz"; $zd = gzopen( $filename, "r" ); $contents = gzread( $zd, 10000 ); gzclose( $zd );
10.75.12 gzrewind
int gzrewind (int zp)
Positionne le pointeur interne du fichier au début du fichier compressé. 10.75.13 gzseek
int gzseek (int zp, int offset)
Positionne le pointeur interne du fichier compressé zp à la position donnée en offset. Equivalent à l'appel (en C) de
gzseek( zp, offset, SEEK_SET ). 10.75.14 gztell
int gztell (int zp)
Retourne la position du pointeur interne du fichier référencé par zp, i.e., son offset en octets depuis le début du fichier. 10.75.15 gzwrite
int gzwrite (int zp, string string, int length)
gzwrite() écrit le contenu de la chaîne string dans
le fichier compressé référencé par le pointeur zp.
Si l'argument length est donné, l'écriture cessera après avoir
écrit length octets (non compressé), ou bien si
la fin de la chaîne a été atteinte.
10.75.16 readgzfile
int readgzfile (string filename, int use_include_path)
Lit un fichier, le décompresse et l'écrit dans la sortie standard. 10.75.17 gzcompress
string gzcompress (string data, int level )
Cette fonction retourne la version compressé GZ de la chaîne
data, ou false en cas d'erreur. Le paramètre
level peut prendre des valeurs depuis 0 (pas de
compression) jusqu'à 9 (compression maximum).
10.75.18 gzuncompress
string gzuncompress (string data, int length )
gzuncompress() prend la chaîne data
en entrée (compressée par gzcompress()) et retourne
la chaîne originale, ou bien FALSE en cas d'erreur. Cette fonction
retournera une erreur si la taille de la chaîne décompressée est plus de
256 fois la longueur de la chaîne compressée data
ou plus que le paramètre optionnel length.
A Débuggeur PHP
A.1 Utiliser le débuggeur PHP
Le débuggeur PHP sert à repérer les bugs récalcitrants. Le débuggeur fonctionne en se
connectant à un port TCP à chaque démarrage de PHP. Tous les
messages d'erreur seront envoyés sur cette connexion. Cette page est faite pour un
"serveur de débuggage", qui peut peut fonctionner avec un IDE ou un éditeur programmable (tel que Emacs).
Desormais, toutes les alertes, notes, ... seront envoyées sur la socket client,
, même si vous avez inactivé le rapport d'erreur avec
error_reporting().
A.2 Debugger Protocol
Le protocole de débugage est ligne par ligne. Chaque ligne a un type type, et plusieurs lignes composent un message
Chaque message commence avec une ligne du type start et se termine
avec une ligne de type end. PHP peut envoyer des lignes de plusieurs messages simultanément.
date time host(pid) type: message-data
Exemple de message du Debugger 1998-04-05 23:27:400966 lucifer.guardian.no(20481) start: notice 1998-04-05 23:27:400966 lucifer.guardian.no(20481) message: Uninitialized variable 1998-04-05 23:27:400966 lucifer.guardian.no(20481) location: (null):7 1998-04-05 23:27:400966 lucifer.guardian.no(20481) frames: 1 1998-04-05 23:27:400966 lucifer.guardian.no(20481) function: display 1998-04-05 23:27:400966 lucifer.guardian.no(20481) location: /home/ssb/public_html/test.php3:10 1998-04-05 23:27:400966 lucifer.guardian.no(20481) end: notice
B Migration de PHP/FI 2.0 à PHP 3.0
B.1 A propos des incompatibilités en 3.0
PHP 3.0 a été entièrement réécrit. Le nouvel analyseur syntaxique est beaucoup plus robuste et cohérent qu'en version 2.0. Il est aussi nettement plus rapide, et utilise encore moins de mémoire. Cependant, ces améliorations n'ont pu être possible qu'au prix de modifications parfois importantes, tant au niveau des syntaxes, qu'au niveau des fonctionnalités. B.2 Start/end tags
La première chose que vous remarquerez probablement est que les balises de PHP start et end ont changé. L'ancienne forme <? > a été remplacée par trois nouvelles balises possibles : Migration: Migration: balises start/end <? echo "Ceci est du code PHP/FI 2.0.\n"; > Comme en version 2.0, PHP/FI accepte aussi cette variante : Migration: premières nouvelles balises start/end <? echo "Ceci est du code PHP 3.0!\n"; ?> Notez bien que la balise de fin contient désormais un point d'interrogation et un signe " supérieur à " >. Cependant, si vous souhaitez utiliser XML sur votre serveur, vous aurez surement des problèmes avec cette variante, car PHP risque d'essayer d'exécuter des balises XML. A cause de ceci, la notation suivante a été ajoutée : Migration: second new start/end tags <?php echo "This is PHP 3.0 code!\n"; ?> Some people have had problems with editors that don't understand the processing instruction tags at all. Microsoft FrontPage is one such editor, and as a workaround for these, the following variation was introduced as well: Deuxièmes nouvelles balises start/end <script language="php"> echo "Ceci est du code PHP 3.0!\n"; </script>
B.3 if..endif syntax
La syntaxe alternative pour écrire des instructions if/elseif/else, avec if(); elseif(); else; endif; ne pouvait pas être conservée sans ajouter beaucoup de complexité à l'analyseur syntaxique. De ce fait, cette syntaxe à changée : Migration: ancienne syntaxe if..endif if ($foo); echo "oui\n"; elseif ($bar); echo "presque\n"; else; echo "non\n"; endif; Migration: nouvelle syntaxe if..endif if ($foo): echo "oui\n"; elseif ($bar): echo "presque\n"; else: echo "non\n"; endif;
Notez que les points virgules ont été remplacée par des point dans toutes les commandes, sauf pour la dernière expression (endif). B.4 while syntax
Tout comme pour if..endif, la syntaxe des boucles while..endwhile a changée as well: Migration: ancienne syntaxe while..endwhile while ($more_to_come); ... endwhile; Migration: nouvelle syntaxe while..endwhile while ($more_to_come): ... endwhile;
B.5 Types d'expression
PHP/FI 2.0 utilisait le membre à gauche dans les expressions, pour déterminer
le type de résultat attendu. PHP 3.0 prend en compte les deux cotés de
l'expression, et cela peut produire des résultats inattendus avec les scripts 2.0.
$a[0]=5; $a[1]=7; $key = key($a); while ("" != $key) { echo "$keyn"; next($a); }
En PHP/FI 2.0, cet exemple va afficher les indices des $a.
En PHP 3.0, l'exemple ne va rien afficher du tout. La raison est
qu'en PHP 2.0, puisque l'argument de gauche est de type chaîne,
une comparaison de chaîne était effectué, et, effectivement, ""
n'est pas "", ce qui conduit la boucle à continuer.
En PHP 3, lorsqu'une chaîne est comparée avec un entier, la comparaison est de
type chaîne (la chaîne est convertie en entier).
Ce qui revient à faire la comparaison entre (atoi("")) qui vaut 0, et
la variablelist qui vaut aussi 0, et comme 0==0,
la boucle ne commence même pas.
while ((string)$key != "") {
B.6 Les messages d'erreur ont changé
Les messages d'erreur en PHP 3.0 sont généralement plus précis que ceux de la version 2.0., mais vous ne verrez plus la portion de code qui a causé l'erreur. A la place, un numéro de ligne et un nom de fichier sera retourné.
B.7 Evaluation rapide des booléens
En PHP 3., l' évaluation des est court circuité. Cela signifie dans une expression telle
que ((1 || test_me())), la fonction test_me
ne sera pas exécutée, car cela ne changera pas le résultat. B.8 La valeur true/false comme retour de fonctions
La plupart des fonctions internes de PHP ont été réécrite pour qu'elle retourne TRUE en cas de succès, et FALSE en cas d'erreur, au contraire des fonctions qui retournaient 0 et -1 en PHP/FI 2.0. Le nouveau comportement est beaucoup plus logique, comme par exemple $fp = fopen("/your/file") or fail("fichier non trouvé!");.Etant donné que PHP/FI 2.0 n'a pas de règle claire à propos de ce que les fonctions doivent retourner en cas d'echec, la plus part des scripts devront probablement être vérifié manuellement, après avoir utilisé le convertisseur 2.0 à 3.0.
$fp = fopen($file, "r"); if ($fp == -1); echo("Impossible d'ouvrir le fichier $file en lecture <br>\n"); endif; Migration depuis 2.0: valeur retournées, nouvelle façon $fp = @fopen($file, "r") or print("Impossible d'ouvrir le fichier $file en lecture<br>\n");
B.9 Diverses incompatibilités
Migration depuis 2.0: concaténation de chaînes echo "1" + "1";En PHP 2.0 cela retournerait 11, en PHP 3.0 cela va retourner 2. A la place, faites :echo "1"."1";$a = 1; $b = 1; echo $a + $b; C Développement PHP
C.1 Ajouter des fonctions à PHP
C.1.1 Prototypes de fonctions
Toutes les fonctions suivent le schéma suivant : void php3_foo(INTERNAL_FUNCTION_PARAMETERS) { }
Même si votre fonction ne prend aucun argument, c'est comme cela qu'elle doit être
appelée.
C.1.2 Arguments de fonctions
Les arguments sont toujours de type val. Ce type contient un membre de type union,
qui indique le type réél d'argument. De cette façon, si votre fonction prend deux
arguments, elle ressemble à ceci :
pval *arg1, *arg2; if (ARG_COUNT(ht) != 2 || getParameters(ht,2,&arg1,&arg2)==FAILURE) { WRONG_PARAM_COUNT; }
NOTE: Les arguments peuvent être passé par valeur ou par référence. Dans les deux cas,
vous devez passer &(pval *) à getParameters. Si vous voulez vérifier que le n-ième
paramètre a été passé par référence ou par valeur, vous devez utiliser la fonction
ParameterPassedByReference(ht,n). Elle retournera 1 ou 0.
C.1.3 Fonctions à nombre d'arguments variable
Une function peut prendre un nombre variable d'arguments. Si votre fonction peut prendre
deux ou trois arguments, utiliser la syntaxe suivante :
pval *arg1, *arg2, *arg3; int arg_count = ARG_COUNT(ht); if (arg_count < 2 || arg_count > 3 || getParameters(ht,arg_count,&arg1,&arg2,&arg3)==FAILURE) { WRONG_PARAM_COUNT; }
C.1.4 Utiliser les arguments d'une fonction
De type de chaque argument est stocké dans le champs pval. Ce champs peut prendre les valeurs suivantes :
convert_to_long(arg1); convert_to_double(arg1); convert_to_string(arg1); convert_to_boolean_long(arg1); /* Si la chaîne est "" ou "0" elle devient 0, 1 sinon */ convert_string_to_number(arg1); /* Converti une chaîne en LONG ou DOUBLE suivant la chaîne */
C.1.5 Gestion de la mémoire dans une fonction
Toute la mémoire nécessaire à une fonctoin doit être allouée avec emalloc() ou
estrdup(). Ces fonctions ont le gout et l'odeur des classiques malloc() et
strdup(). La mémoire doit êtrel libérée avec efree().
C.1.6 Affecter une variable dans la table des Symboles
Un grand nombre de macros sont disponibles pour rendre plus facile l'insertion de variables dans la table des symboles :
if (hash_exists(active_symbol_table,"foo",sizeof("foo"))) { existe... } else { n'existe pas } Rechercher la taille d'une variable dans la table des symboles hash_find(active_symbol_table,"foo",sizeof("foo"),&pvalue); check(pvalue.type);
En PHP 3.0, les tableaux sont implémentés en utilisant les mêmes tables de hash que
les variables. Cela signifie que les deux fonctions ci dessus peuvent être appelées
pour vérifier la présence de variables dans un tableau.
pval arr; if (array_init(&arr) == FAILURE) { failed... }; hash_update(active_symbol_table,"foo",sizeof("foo"),&arr,sizeof(pval),NULL);
Ce code déclare un nouveau tableau, appelé $foo, dans la table de symbole Ce tableau est vide.
pval entry; entry.type = IS_LONG; entry.value.lval = 5; /* définit $foo["bar"] = 5 */ hash_update(arr.value.ht,"bar",sizeof("bar"),&entry,sizeof(pval),NULL); /* définit $foo[7] = 5 */ hash_index_update(arr.value.ht,7,&entry,sizeof(pval),NULL); /* définit la prochaine place libre dans $foo[], * $foo[8], qui sera 5 (comme en php2) */ hash_next_index_insert(arr.value.ht,&entry,sizeof(pval),NULL);
Si vous voulez modifier une valeur que vous avez inséré dans une table de hash,
vous devez d'abord la lire dans la table. Pour éviter cette recherche, vous pouvez
fournir une pval ** à la fonction d'ajout dans la table de hash, et elle modifiera
la valeur à l'adresse pval *, avec la valeur donnée. Si cette valeur est NULL,
(comme dans tous les exemples ci dessus), ce paramètre sera ignoré.
if (array_init(return_value) == FAILURE) { échec...; }
...puis ajouter les valeurs gr‚ces aux macros: add_next_index_long(return_value,long_value); add_next_index_double(return_value,double_value); add_next_index_string(return_value,estrdup(string_value)); Bien sur, si l'ajout n'est pas fait juste après l'initialisation, vous devrez d'abord rechercher le tableau : pval *arr; if (hash_find(active_symbol_table,"foo",sizeof("foo"),(void **)&arr)==FAILURE) { introuvable... } else { utilisez arr->value.ht... }
C.1.7 Retourne une valeur simple
Un grand nombre de macros sont disponible pour simplifier le retour des valeurs.
C.1.8 Retourner des valeurs complexes
Votre fonction peut aussi retourner des valeurs complexes, tels que des objets ou
tableaux.
C.1.9 Using the resource list
PHP 3.0 dispose de standard pour traiter un certains nombre de ressources.
Ils remplacent tous les listes de PHP 2.0.
Typiquement, ces fonctions sont utilisées pour les pilotes SQL, mais elles peuvent
servir n'importe quoi d'autre. Par exemple, conserver un pointeur de fichier.
RESOURCE *resource; /* ...alloue de la mémoire pour la ressource, et l'acquiert ... */ /* Ajoute la nouvelel ressource dans la liste */ return_value->value.lval = php3_list_insert((void *) resource, LE_RESOURCE_TYPE); return_value->type = IS_LONG; Utiliser une ressource existante pval *resource_id; RESOURCE *resource; int type; convert_to_long(resource_id); resource = php3_list_find(resource_id->value.lval, &type); if (type != LE_RESOURCE_TYPE) { php3_error(E_WARNING,"resource index %d has the wrong type",resource_id->value.lval); RETURN_FALSE; } /* ...utiliser la ressource... */ Effacer une ressource existante pval *resource_id; RESOURCE *resource; int type; convert_to_long(resource_id); php3_list_delete(resource_id->value.lval);
Les types de ressources doivent être enregistré dans le fichier php3_list.h, dans
l'énumération list_entry_type. En plus, il faut penser à ajouter une fonctoin
de terminaison, pour chaque type de ressource défini, dans le fichier list.c, pour
la fonction list_entry_destructor() (même si vous n'avez rien de particulier à faire
lors de la terminaison, vous devez au moins ajouter un cas vide.
C.1.10 Utiliesr la table des ressources persistantes.
PHP 3.0 dispose d'une lieu de stockage des ressources persistantes (i.e., les ressources qui doivent être conservées d'un hit à l'autre). Le premier module a utiliser cette capacité a été MySQL, et mSQL suivi, ce qui fait que l'on peut se faire une impression du fonctionnement de cette fonctoin avec mysql.c. Les fonctions ressemblent à ceci :
Cependant, il est probable que ces fonctions seront inutiles pour vous, lorsque vous
essayerez d'implémentez un module persistant. Typiquement, on utiliser le fait que
la liste de ressources persistante est une table de hash. Par exemple, dans les modules
MySQL/mSQL, lors d'un appel à pconnect(), la fonction construit une chaîne avec
l'hôte/utilisateur/mot_de_passe, et l'utilise pour enregistrer dans la table de hash.
Au prochain appel, avec les mêmes hôte/utilisateur/mot_de_passe, la même clé sera
générée, et la ressource associée sera retrouvée.
C.1.11 Ajouter des directives de configuration à l'exécution
De nombreuses caractéristiques de PHP3 peuvent être configurée à l'éxécution. Ces
directives peuvent apparaitre dans le fichier php3.ini, ou, dans le cas du module
Apache, dans le fichier .conf. L'avantage de l'avoir dans le fichier .conf, est
que ces caractéristiques peuvent être configurées dossier par dossier. Cela
signifie qu'un dossier peut avoir un safe mode exec dir, tandis qu'un autre en
aura un autre. Cette granularité de la configuration peut être extrêmement pratique
lorsque le serveur supporte plusieurs serveurs virtuels.
C.2 Appeler des fonctions utilisateurs
Pour appelrr des fonctions utilisateurs depuis une fonction interne, vous devez utiliser
la fonction call_user_function.
C.2.1 HashTable *function_table
La table de hash dans laquelle le fonction doit être recherchée.
C.2.2 pval *object
Un pointeur sur un objet sur lequel la fonctoin est invoquée. Il devrait être à NULL,
si on invoque une fonction globale. Si il n'est pas à NULL (ie, il pointe sur un
objet), l'argument function_table est ignorée, et la liste des fonctions sera lue
dans l'objet, plutôt que dans l'argument. L'objet PEUT être modifié par la fonction
qui est appelée (la fonction y aura accès via $this). Si, vous quelque raison, vous
ne le voulez pas, envoyez une copie de l'ojbet à la place.
C.2.3 pval *function_name
Le nom de la fonction à appeler. Elle doit être de type pval, IS_STRING, avec les
valeurs de function_name.str.val et function_name.str.len correctes.
function_name est modifié par call_user_function -
il est converti en minuscule. Si vous voulez préserver la casse, envoyez une copie
du nom de la fonction.
C.2.4 pval *retval
Un pointeur sur une structure pval, dans laquelle la valeur de retour de la fonction
sera placée. La structure doit avoir été allouée au préalable,
- call_user_function ne l'allouera pas.
C.2.5 int param_count
Le nombre de paramètre passé à la fonction.
C.2.6 pval *params[]
Un tableau de pointeur sur les valeurs qui vont être passées comme arguments à la
fonction. Le premier argument est à l'offset 0, le second à l'offset 1,... Le tableau
est un tableau de pointeurs sur pval; Les pointeurs sont envoyés tels quels à la
fonction, ceq ui signifie que si la fonction modifie les arguments, les valeurs
originales seront modifiées. Si vous voulez l'éviter, passez une copie à la place.
C.3 Rapport d'erreurs
Pour signaler les erreurs d'une fonction interne, vous devez appelez la fonctoin
php3_error. Cette fonction prend deux arguments au
moins : le niveau de l'erreur, et le message d'erreur, sous forme de chaîne de
caractères. Tous les arguments suivants sont des paramètres de formats de chaîne.
Les niveaux d'erreurs sont :
C.3.1 E_NOTICE
Notes ne sont pas affichées par défaut, et indique que le script a rencontré quelque
chose qui peut être une erreur, mais peut aussi être un événement normal dans la vie
du script. Par exemple, essayer d'accéder à une valeur qui n'a pas été déclarée, ou
appeler stat() sur un fichier qui n'existe pas.
C.3.2 E_WARNING
Les alertes sont affichées par défaut, mais n'interrompent pas l'éxécution du script.
Elles indiquent un problème qui doit être intercepté par le script avant que l'appel
. Par exemple, appeler ereg() avec une regex invalide.
C.3.3 E_ERROR
Les erreurs sont aussi affichées par défaut, et l'exécution du script est
interrompue. Elles indiquent des erreurs qui ne peuvent pas être ignorées, comme des
problèmes d'allocation de mémoire, par exemple.
C.3.4 E_PARSE
Les erreurs d'analyse de doivent être générées que par l'analyseur. Elles ne sont
citées ici que dans le but d'être exhaustif.
C.3.5 E_CORE_ERROR
Elles sont similaires aux erreurs E_ERROR, mais elles sont générées par le code
de PHP. Les fonctions ne doivent pas générer ce genre d'erreur.
C.3.6 E_CORE_WARNING
Elles sont similaires à E_WARNING, mais elles sont générées par le code
de PHP. Les fonctions ne doivent pas générer ce genre d'erreur.
C.3.7 E_COMPILE_ERROR
E_COMPILE_ERROR est similaire à E_ERROR, mais elle est générée
par le moteur de script Zend. Les fonctions ne doivent pas générer
ce genre d'erreur.
C.3.8 E_COMPILE_WARNING
E_WARNING est similaire à E_COMPILE_WARNING, mais elle est générée
par le moteur de script Zend. Les fonctions ne doivent pas générer
ce genre d'erreur.
C.3.9 E_USER_ERROR
E_USER_ERROR est similaire à E_ERROR, mais elle est générée
par le code PHP avec la fonction trigger_error().
Les fonctions ne doivent pas générer ce genre d'erreur.
C.3.10 E_USER_WARNING
E_USER_WARNING est similaire à E_WARNING, mais elle est générée
par le code PHP avec la fonction trigger_error().
Les fonctions ne doivent pas générer ce genre d'erreur.
C.3.11 E_USER_NOTICE
E_USER_NOTICE est similaire à E_NOTICE, mais elle est générée
par le code PHP avec la fonction trigger_error().
Les fonctions ne doivent pas générer ce genre d'erreur.
Index des fonctions
ABCDEFGHIJKLMNOPQRSTUVWXYZIndex des concepts
ABCDEFGHIJLMNOPRSTUVIndex des exemples
ABCDEFGILMNOPQRSTUVWXY
|